home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dsp56k / a56-1_0.lha / a56-1.0 / gram.c < prev    next >
C/C++ Source or Header  |  1993-08-09  |  62KB  |  2,072 lines

  1.  
  2. # line 2 "a56.y"
  3. /*******************************************************
  4.  *
  5.  *  a56 - a DSP56001 assembler
  6.  *
  7.  *  Written by Quinn C. Jensen
  8.  *  July 1990
  9.  *  jensenq@npd.novell.com (or jensenq@qcj.icon.com)
  10.  *
  11.  *******************************************************\
  12.  
  13. /*
  14.  * Copyright (C) 1990, 1991 Quinn C. Jensen
  15.  *
  16.  * Permission to use, copy, modify, distribute, and sell this software
  17.  * and its documentation for any purpose is hereby granted without fee,
  18.  * provided that the above copyright notice appear in all copies and
  19.  * that both that copyright notice and this permission notice appear
  20.  * in supporting documentation.  The author makes no representations
  21.  * about the suitability of this software for any purpose.  It is
  22.  * provided "as is" without express or implied warranty.
  23.  *
  24.  */
  25.  
  26. /*
  27.  *  a56.y - The YACC grammar for the assembler.
  28.  *
  29.  *  Note:  This module requires a "BIG" version of YACC.  I had to
  30.  *  recompile YACC in the largest mode available.
  31.  *
  32.  */
  33.  
  34. #include "a56.h"
  35. unsigned int w0, w1, pc;
  36. extern BOOL list_on;
  37. BOOL uses_w1;
  38. int just_rep = 0;
  39. extern char inline[];
  40. char *spaces(), *luntab();
  41. char segs[] = "PXYL";
  42. int seg;
  43. int substatement = 0;
  44.  
  45. #define R_R6            0x0001
  46. #define R_R5            0x0002
  47. #define R_R4            0x0004
  48. #define R_DATA_ALU_ACCUM    0x0008
  49. #define R_CTL_REG        0x0010
  50. #define R_FUNKY_CTL_REG        0x0020
  51. #define R_SDX            0x0040
  52. #define R_SDY            0x0080
  53. #define R_LSD            0x0100
  54. #define R_AB            0x0200
  55. #define R_XREG            0x0400
  56. #define R_YREG            0x0800
  57.  
  58. # line 58 "a56.y"
  59. typedef union  {
  60.     int ival;    /* integer value */
  61.     char *sval;    /* string */
  62.     int cval;    /* character */
  63.     char cond;    /* condition */
  64.     struct regs {
  65.         int r6, r5, r4, data_alu_accum, ctl_reg, funky_ctl_reg;
  66.         int sdx, sdy, lsd, ab, xreg, yreg;
  67.         int flags;
  68.     } regs;
  69.     struct ea {
  70.         int mode;
  71.         int ext;
  72.         int pp;
  73.     } ea;
  74. } YYSTYPE;
  75. # define CHEX 257
  76. # define CDEC 258
  77. # define FRAC 259
  78. # define AREG 260
  79. # define BREG 261
  80. # define MREG 262
  81. # define NREG 263
  82. # define RREG 264
  83. # define XREG 265
  84. # define YREG 266
  85. # define OP 267
  86. # define OPA 268
  87. # define OPP 269
  88. # define OP_JCC 270
  89. # define OP_JSCC 271
  90. # define OP_TCC 272
  91. # define SYM 273
  92. # define STRING 274
  93. # define CHAR 275
  94. # define COMMENT 276
  95. # define XMEM 277
  96. # define YMEM 278
  97. # define LMEM 279
  98. # define PMEM 280
  99. # define AAAA 281
  100. # define A10 282
  101. # define BBBB 283
  102. # define B10 284
  103. # define AABB 285
  104. # define BBAA 286
  105. # define XXXX 287
  106. # define YYYY 288
  107. # define SR 289
  108. # define MR 290
  109. # define CCR 291
  110. # define OMR 292
  111. # define SP 293
  112. # define SSH 294
  113. # define SSL 295
  114. # define LA 296
  115. # define LC 297
  116. # define EOL 298
  117. # define EOS 299
  118. # define OP_ABS 300
  119. # define OP_ADC 301
  120. # define OP_ADD 302
  121. # define OP_ADDL 303
  122. # define OP_ADDR 304
  123. # define OP_ASL 305
  124. # define OP_ASR 306
  125. # define OP_CLR 307
  126. # define OP_CMP 308
  127. # define OP_CMPM 309
  128. # define OP_DIV 310
  129. # define OP_MAC 311
  130. # define OP_MACR 312
  131. # define OP_MPY 313
  132. # define OP_MPYR 314
  133. # define OP_NEG 315
  134. # define OP_NORM 316
  135. # define OP_RND 317
  136. # define OP_SBC 318
  137. # define OP_SUB 319
  138. # define OP_SUBL 320
  139. # define OP_SUBR 321
  140. # define OP_TFR 322
  141. # define OP_TST 323
  142. # define OP_AND 324
  143. # define OP_ANDI 325
  144. # define OP_EOR 326
  145. # define OP_LSL 327
  146. # define OP_LSR 328
  147. # define OP_NOT 329
  148. # define OP_OR 330
  149. # define OP_ORI 331
  150. # define OP_ROL 332
  151. # define OP_ROR 333
  152. # define OP_BCLR 334
  153. # define OP_BSET 335
  154. # define OP_BCHG 336
  155. # define OP_BTST 337
  156. # define OP_DO 338
  157. # define OP_ENDDO 339
  158. # define OP_LUA 340
  159. # define OP_MOVE 341
  160. # define OP_MOVEC 342
  161. # define OP_MOVEM 343
  162. # define OP_MOVEP 344
  163. # define OP_ILLEGAL 345
  164. # define OP_INCLUDE 346
  165. # define OP_JMP 347
  166. # define OP_JCLR 348
  167. # define OP_JSET 349
  168. # define OP_JSR 350
  169. # define OP_JSCLR 351
  170. # define OP_JSSET 352
  171. # define OP_NOP 353
  172. # define OP_REP 354
  173. # define OP_RESET 355
  174. # define OP_RTI 356
  175. # define OP_RTS 357
  176. # define OP_STOP 358
  177. # define OP_SWI 359
  178. # define OP_WAIT 360
  179. # define OP_EQU 361
  180. # define OP_ORG 362
  181. # define OP_DC 363
  182. # define OP_END 364
  183. # define OP_PAGE 365
  184. # define OP_PSECT 366
  185. # define SHL 367
  186. # define SHR 368
  187. #define yyclearin yychar = -1
  188. #define yyerrok yyerrflag = 0
  189. extern int yychar;
  190. extern short yyerrflag;
  191. #ifndef YYMAXDEPTH
  192. #define YYMAXDEPTH 150
  193. #endif
  194. YYSTYPE yylval, yyval;
  195. # define YYERRCODE 256
  196.  
  197. # line 1421 "a56.y"
  198.  
  199.  
  200. #include <stdio.h>
  201.  
  202. int yydebug;
  203.  
  204. extern struct {int n; char *name;} tok_tab[];
  205. extern int n_tok;
  206.  
  207. char *tok_print(tok)
  208. int tok;
  209. {
  210.     int i;
  211.     static char buf[32];
  212.  
  213.     if(tok < 256) {
  214.     sprintf(buf, "'%c'", tok);
  215.     return(buf);
  216.     } else {
  217.     for(i = 0; i < n_tok; i++) {
  218.         if(tok == tok_tab[i].n)
  219.         return(tok_tab[i].name);
  220.     }
  221.     }
  222.     return("<unknown>");
  223. }
  224.  
  225. yyerror(s)
  226. char *s;
  227. {
  228.     extern int error;
  229.     error++;
  230.  
  231.     if(pass == 2) {
  232.     fprintf(stderr, "%s: line %d: %s (tok=%s)\n", curfile, curline,
  233.         s, tok_print(yychar));
  234.     fprintf(stderr, "%s\n", inline); 
  235.     printf("%s: line %d: %s (tok=%s)\n", curfile, curline,
  236.         s, tok_print(yychar));
  237.     printf("%s\n", inline); 
  238.     }
  239. }
  240.  
  241. char *luntab(s)
  242. char *s;
  243. {
  244.     static char buf[256];
  245.  
  246.     strcpy(buf, s);
  247.  
  248.     untab(buf);
  249.     return(buf);
  250. }short yyexca[] ={
  251. -1, 1,
  252.     0, -1,
  253.     270, 29,
  254.     271, 29,
  255.     272, 29,
  256.     298, 6,
  257.     299, 6,
  258.     300, 29,
  259.     301, 29,
  260.     302, 29,
  261.     303, 29,
  262.     304, 29,
  263.     305, 29,
  264.     306, 29,
  265.     307, 29,
  266.     308, 29,
  267.     309, 29,
  268.     310, 29,
  269.     311, 29,
  270.     312, 29,
  271.     313, 29,
  272.     314, 29,
  273.     315, 29,
  274.     316, 29,
  275.     317, 29,
  276.     318, 29,
  277.     319, 29,
  278.     320, 29,
  279.     321, 29,
  280.     322, 29,
  281.     323, 29,
  282.     324, 29,
  283.     325, 29,
  284.     326, 29,
  285.     327, 29,
  286.     328, 29,
  287.     329, 29,
  288.     330, 29,
  289.     331, 29,
  290.     332, 29,
  291.     333, 29,
  292.     334, 29,
  293.     335, 29,
  294.     336, 29,
  295.     337, 29,
  296.     338, 29,
  297.     339, 29,
  298.     340, 29,
  299.     341, 29,
  300.     342, 29,
  301.     343, 29,
  302.     344, 29,
  303.     345, 29,
  304.     347, 29,
  305.     348, 29,
  306.     349, 29,
  307.     350, 29,
  308.     351, 29,
  309.     352, 29,
  310.     353, 29,
  311.     354, 29,
  312.     355, 29,
  313.     356, 29,
  314.     357, 29,
  315.     358, 29,
  316.     359, 29,
  317.     360, 29,
  318.     363, 29,
  319.     -2, 0,
  320. -1, 8,
  321.     298, 32,
  322.     299, 32,
  323.     -2, 28,
  324.     };
  325. # define YYNPROD 283
  326. # define YYLAST 1359
  327. short yyact[]={
  328.  
  329.  129, 216, 217, 330, 332, 427, 393, 472, 114, 339,
  330.   17, 214,  14,  15, 222, 390, 220, 171, 172, 223,
  331.  100, 384, 219, 128, 394, 416,  95, 428, 429, 430,
  332.  229, 210, 211, 168, 218, 167, 199, 389, 200, 169,
  333.  170, 182, 109, 183, 280, 275, 222, 383, 220, 282,
  334.  279, 223, 278, 126, 281, 509, 280, 275,  17, 514,
  335.  104, 282, 279,  94, 278, 432, 281, 236, 240, 280,
  336.  275, 515,   4, 367, 282, 279, 504, 278, 215, 281,
  337.  134, 135, 251, 253, 257, 483, 262, 107, 265,   8,
  338.  237, 241,   5, 453, 452,  93, 347, 235, 239, 296,
  339.  111, 274, 263, 280, 275, 248, 496, 256, 282, 279,
  340.  354, 278, 249, 281, 258, 495, 268, 454, 270, 266,
  341.  267, 269,  97,  98,  99,  96, 274, 450, 451, 177,
  342.  178, 273, 111, 283, 284, 285, 280, 275, 298, 299,
  343.  287, 282, 279, 291, 278, 176, 281, 175, 227, 101,
  344.  102, 103, 193, 194, 197, 293, 273, 101, 102, 103,
  345.  274, 209,  12, 280, 275, 474, 213, 521, 282, 279,
  346.  192, 278, 221, 281, 448, 242, 447, 516,  10, 280,
  347.   13,  11,   9, 510, 282, 279, 161, 278, 162, 281,
  348.  273, 228, 280, 274, 507, 127, 505, 282, 503, 497,
  349.  498, 492, 281, 491, 201, 202, 203, 288, 487, 461,
  350.  292, 434, 231, 232, 233, 423, 419, 195, 196, 212,
  351.  274, 204, 418, 273, 417, 414, 224, 225, 226, 112,
  352.  411, 101, 102, 103, 110, 408, 407, 406, 188, 322,
  353.  321, 316, 382, 328, 326, 285, 283, 115, 381, 116,
  354.  331, 333, 380, 293, 244, 245, 246, 259, 376, 399,
  355.  346, 400, 336, 101, 102, 103, 340, 375, 342, 243,
  356.  243, 243, 243, 370, 369, 206, 207, 208, 352, 115,
  357.  355, 116, 190, 191, 351, 350, 349, 368, 348, 345,
  358.  371, 374, 353, 344, 338, 109, 357, 358, 359, 360,
  359.  361, 362, 363, 364, 365, 366, 337, 335, 329, 198,
  360.  325, 324, 320, 372, 315, 111, 323, 377, 378, 314,
  361.  327, 403, 313, 312, 311, 310, 404, 405, 309, 308,
  362.  410, 307, 306, 341, 305, 343, 304, 303, 302, 301,
  363.  300, 334, 285, 290, 402, 421, 422, 289, 286, 424,
  364.  272, 426, 271, 409, 455, 379, 133, 412, 431, 413,
  365.  356, 415, 205, 205, 205, 205, 230, 125, 420, 435,
  366.  436, 437, 440, 334, 277, 276, 445, 446, 124, 123,
  367.  122, 433, 166, 121, 441, 443, 277, 276, 280, 275,
  368.  120, 119, 118, 282, 279, 260, 278, 255, 281, 277,
  369.  276, 252, 439, 174, 457, 460, 247, 459, 462, 463,
  370.  464, 222, 471, 220, 466, 173, 223, 238, 478, 479,
  371.  480, 468, 473, 476, 473, 132, 477, 234, 340, 159,
  372.  133, 218, 481, 277, 276, 469, 189, 488, 475, 179,
  373.  180,  89, 493, 486,  88,  26, 101, 102, 103,  25,
  374.  490, 442, 444, 401,  24, 484, 485,  23, 163, 164,
  375.  165,  16, 115, 499, 116, 117, 277, 276, 230,  22,
  376.   92, 331, 333, 500, 181, 184, 185, 186, 187,  21,
  377.  105, 458, 501, 502, 473,  20, 106,  18, 467,   7,
  378.    6,   3, 508, 277, 276, 341,   2, 111,   1, 482,
  379.  512, 506, 261,  59,  58,  85, 511, 264, 517, 160,
  380.  297, 519, 513, 130, 145, 465, 456, 523, 113,   0,
  381.    0, 518, 525,   0,   0,   0,   0, 522,   0,   0,
  382.    0,   0, 524,  50,  56,  32,  38,  42,  52,  48,
  383.   39,  35,  36,  87,  29,  30,  27,  28,  54,  86,
  384.   37,  57,  31,  40,  44,  34,  43,  45,  91,  47,
  385.   53,  49,  41,  46,  90,  55,  51,  80,  79,  78,
  386.   77,  67,  68,  84,  33,  83,  82,  81,  74,   0,
  387.   61,  65,  64,  60,  63,  62,  76,  66,  71,  75,
  388.   72,  69,  73,  70, 230, 222,  19, 220,   0,   0,
  389.  223,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  390.    0,   0, 385, 386, 387, 388,   0,   0, 391, 392,
  391.    0,   0, 395, 396, 397, 398,   0,   0, 101, 102,
  392.  103,   0, 230,   0,   0,   0,   0,   0,   0,   0,
  393.    0,   0,   0,   0, 115,   0, 116,   0,   0,   0,
  394.  138, 139, 144, 143, 142, 136, 137,   0,   0, 425,
  395.    0,   0,   0,   0,   0,   0,   0, 134, 135, 131,
  396.    0, 140, 146, 141, 147, 150, 151, 148, 149, 152,
  397.    0, 111, 153, 154, 155, 156, 157, 158,   0,   0,
  398.  449,   0,   0, 138, 139, 144, 143, 142, 136, 137,
  399.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  400.  134, 135,   0, 250, 140, 146, 141, 147, 150, 151,
  401.  148, 149, 152,   0,   0, 153, 154, 155, 156, 157,
  402.  158, 138, 139, 144, 143, 142, 136, 137,   0,   0,
  403.    0,   0,   0,   0,   0,   0,   0,   0, 134, 135,
  404.    0, 470, 140, 146, 141, 147, 150, 151, 148, 149,
  405.  152,   0,   0, 153, 154, 155, 156, 157, 158, 138,
  406.  139, 144, 143, 142, 136, 137,   0,   0,   0,   0,
  407.    0,   0,   0,   0,   0,   0, 134, 135, 373,   0,
  408.  140, 146, 141, 147, 150, 151, 148, 149, 152,   0,
  409.    0, 153, 154, 155, 156, 157, 158,   0,   0,   0,
  410.    0,   0, 101, 102, 103,   0,   0,   0,   0, 138,
  411.  139, 144, 143, 142, 136, 137,   0,   0, 115,   0,
  412.  116,   0,   0,   0,   0,   0, 134, 135,   0,   0,
  413.  140, 146, 141, 147, 150, 151, 148, 149, 152,   0,
  414.    0, 153, 154, 155, 156, 157, 158, 138, 139, 144,
  415.  143, 142, 136, 137,   0,   0,   0,   0,   0,   0,
  416.    0,   0,   0,   0,   0, 438,   0,   0, 140, 146,
  417.  141, 147, 150, 151, 148, 149, 152,   0,   0, 153,
  418.  154, 155, 156, 157, 158, 138, 139, 144, 143, 142,
  419.  136, 137,   0,   0,   0,   0,   0,   0,   0,   0,
  420.    0,   0, 134, 135,   0,   0, 140, 146, 141, 147,
  421.  150, 151, 148, 149, 152,   0,   0, 153, 154, 155,
  422.  156, 157, 158, 138, 139, 144, 143, 142, 136, 137,
  423.  112,   0, 220, 112,   0, 110,   0,   0, 110,   0,
  424.    0, 520,   0,   0, 140, 146, 141, 147, 150, 151,
  425.  148, 149, 152,   0,   0, 153, 154, 155, 156, 157,
  426.  158, 138, 139, 144, 143, 142, 136, 137, 112,   0,
  427.    0,   0,   0, 110,   0,   0,   0,   0,   0, 494,
  428.    0,   0, 140, 146, 141, 147, 150, 151, 148, 149,
  429.  152,   0,   0, 153, 154, 155, 156, 157, 158, 138,
  430.  139, 144, 143, 142, 136, 137, 112,   0, 317, 112,
  431.    0, 110,   0,   0, 110,   0, 111, 489,   0, 111,
  432.  140, 146, 141, 147, 150, 151, 148, 149, 152, 294,
  433.    0, 153, 154, 155, 156, 157, 158, 138, 139, 144,
  434.  143, 142, 136, 137, 112,   0,   0,   0, 319, 110,
  435.    0,   0,   0, 110, 111,   0,   0, 254, 140, 146,
  436.  141, 147, 150, 151, 148, 149, 152,   0,   0, 153,
  437.  154, 155, 156, 157, 158, 138, 139, 144, 143, 142,
  438.  136, 137,   0,   0,   0,   0,   0,   0,   0,   0,
  439.    0,   0, 111,   0,   0, 111, 140, 146, 141, 147,
  440.  150, 151, 148, 149, 152,   0,   0, 153, 154, 155,
  441.  156, 157, 158, 112,   0,   0,   0,   0, 110,   0,
  442.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  443.  111,   0,   0, 294, 111, 295,   0,   0,   0,   0,
  444.    0,   0,   0,   0,   0,   0,   0, 101, 102, 103,
  445.  101, 102, 103,   0,   0,   0,   0,   0,   0,   0,
  446.    0,   0,   0, 115,   0, 116, 115, 108, 116,   0,
  447.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  448.    0,   0,   0,   0,   0, 101, 102, 103,   0,   0,
  449.    0,   0, 318,   0,   0,   0,   0,   0,   0, 111,
  450.    0, 115,   0, 116,   0,   0,   0,   0,   0,   0,
  451.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  452.    0,   0,   0, 101, 102, 103, 101, 102, 103,   0,
  453.    0,   0,   0,   0,   0,   0,   0,   0,   0, 115,
  454.    0, 116, 115,   0, 116,   0,   0,   0,   0,   0,
  455.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  456.    0, 101, 102, 103,   0, 101, 102, 103,   0,   0,
  457.    0,   0,   0,   0,   0,   0,   0, 115,   0, 116,
  458.    0, 115,   0, 116,   0,   0,   0,   0,   0,   0,
  459.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  460.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  461.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  462.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  463.  101, 102, 103,   0,   0,   0,   0,   0,   0,   0,
  464.    0,   0,   0,   0,   0,   0, 115,   0, 116 };
  465. short yypact[]={
  466.  
  467. -1000,-184,-1000,-286,-1000,-1000,-218, 233,-266,-210,
  468. -155,-100,-214,-1000,-1000,-1000,-1000,-1000,-218, 903,
  469. -1000,-1000, 390,-1000,-1000,-1000,-1000, 143, 143, 143,
  470.  143,-248,-248,-1000,-136,-136,-136,-240,-240,-240,
  471. -240,-240,-240,-240,-240,-113,-113,-113,-245,-245,
  472. -245,-245,-245,-245,-245,-245,-256,-256, 371, 371,
  473.  371, 371, 331, 331, 331, 331, 559, 559,-1000,-1000,
  474. -1000,-1000,-1000,-1000,-1000,-1000,-1000, 331, 331, 331,
  475.  331, 433, 787, 559, 316, 825,-162, 825, 331, 331,
  476. -1000,-1000,-1000,1014,-155,1014,-1000,-1000,-1000,-1000,
  477.  308,-1000,-1000,-1000,-1000,-1000, 306,-1000,-1000,  99,
  478. 1014,1014,1014,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  479. -1000,-1000,-1000,-1000,-1000,-1000, 304,-1000, 371, 303,
  480.  299, 371,1083,-165,-1000,-1000,-1000,-1000,-1000,-1000,
  481. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  482. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  483. -127,-1000,-1000,-1000,-1000,-1000,-1000, 296, 295, 294,
  484.  293, 292, 290,-1000,-1000, 288, 287, 285, 284,-1000,
  485. -1000,-1000, 281, 280,-1000,-1000,-1000,-1000,-1000,-1000,
  486. -1000,-1000,-1000, 279, 278,-1000,-1000,-1000,-1000,-1000,
  487. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  488.  275, 270,-1000,-1000,-1000,-1000,-1000,-1000, 976,  99,
  489. -1000,-1000, 938,1018,-1000,-1000,-1000,-1000, 268,-1000,
  490.  979,-1000,-1000,-1000,-1000,-1000,-1000, 371,-1000, 267,
  491.  266, 371,-1000, 264,-1000,-1000,-1000,-1000,   6, 263,
  492.  555, 262,-1000, 250, 371,-1000, 371, 249, 245, 825,
  493. -1000,-168, 244, 242,-1000, 241, 240, 234,  99,1014,
  494.   66,-100, 903,1014,1014,1014,1014,1014,1014,1014,
  495. 1014,1014,1014,-1000,-1000,  32, 825, 230, 229, 509,
  496.  825, 223, 214,  99,1014,1014, 314, 208, 204, 198,
  497. -234,-262,-245,-245,-245,-245,-244,-268,-245,-245,
  498. -277,-257,-245,-245,-245,-245,  99,-1000, 218, 189,
  499.  635,-1000,-1000,-1000, 900, 900, 193, 192, 191, 635,
  500.  186,-1000,-1000,-1000,1014,-197, 181,-197,-255, 180,
  501. -1000,-1000, 178, 172, 635, 825,-1000, 171, 825,-245,
  502.  825,-263,-263,   7,-155, 167,-1000, 126,  19, 142,
  503.  351, 351, 155, 155,-1000,-1000,-1000,-1000, 825, 825,
  504.  825, 597, 371, 371,-1000, 825, 825,  99,  99, 131,
  505. -245,-138,-172,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  506. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 131,
  507. -146, 313, -26, 165,-1000,-1000, 900, 900, 900, -26,
  508. -1000, 471,  99,-108,-197,-108, 371, 825, 825, 825,
  509.  371,-1000,-1000,-179,-1000,-1000,-1000,-1000,-1000,-1000,
  510. -1000,-1000,1014,1014,-100, 164, 749,-1000, 555, 159,
  511.  157, 711,-1000,-1000,-1000,-1000,-1000,-148,-157,-1000,
  512. -1000,-1000,-1000,-1000, 158,-1000, 156,-1000,-1000,-1000,
  513. -1000, 900,-1000,-1000,-1000,-1000,-1000,-1000,-1000,   6,
  514.  555,-1000,-1000,-1000,-1000,-108,-1000,-1000,-1000,-1000,
  515. -1000,-1000,-1000,-1000,  99,  99, 154,-190, 152, 555,
  516.  150, 825,-223, 139, 555,-1000,-1000,-1000, 900,-1000,
  517. -1000,-1000,-1000,-100,-1000,-207, 133, 825,-1000, 555,
  518.  673, 123,-1000,-1000,-1000, 555, 825,-1000,-1000,-1000,
  519.  555, 825,-1000,-1000,-1000,-1000 };
  520. short yypgo[]={
  521.  
  522.    0,   8,   7,   1,  78,   4, 518, 309,  23,  11,
  523.  191, 516,   2, 515,   9, 166, 172, 514,  30, 513,
  524.  382, 403, 436, 238, 170, 154, 221, 161, 429, 510,
  525.  509, 507,   5, 502,  26,   0,   3,  22, 498, 496,
  526.  491, 490, 461, 489, 487, 486,  87, 485, 479, 469,
  527.  465, 457, 454, 449, 445, 444, 441, 148, 427, 417,
  528.  175, 406, 401, 397, 395, 392, 391, 390, 383, 380,
  529.  379, 378, 367 };
  530. short yyr1[]={
  531.  
  532.    0,  38,  38,  39,  39,  39,  40,  40,  40,  40,
  533.   40,  41,  41,  41,  41,  41,  41,  41,  41,  41,
  534.   45,  45,  46,  46,  34,  34,  34,  34,  43,  43,
  535.   44,  42,  42,  47,  47,  47,  49,  49,  49,  49,
  536.   49,  49,  49,  49,  49,  49,  49,  49,  49,  49,
  537.   49,  49,  49,  49,  49,  49,  49,  49,  49,  49,
  538.   49,  49,  49,  49,  49,  49,  49,  28,  30,  30,
  539.   30,  29,  29,  29,  29,  20,  20,  20,  20,  20,
  540.   20,  21,  21,  21,  21,  22,  22,  22,  22,  23,
  541.   24,  24,  25,  26,  27,  27,   7,   7,  48,  48,
  542.   48,  48,  54,  54,  54,  54,  55,  55,  56,  56,
  543.   51,  51,  51,  51,  51,  51,  51,  51,  51,  51,
  544.   51,  51,  51,  51,  51,  51,  51,  51,  51,  59,
  545.   59,  59,  59,  59,  58,  58,  58,  58,  58,  57,
  546.   57,  11,  11,  11,  11,  52,  52,  52,  52,  60,
  547.   60,  13,  13,  13,  53,  53,  53,  53,  53,  64,
  548.   64,  33,  31,  63,  63,  63,  63,  63,  63,  61,
  549.   61,  61,  61,  61,  61,  36,  36,  36,  62,  62,
  550.   10,   8,   8,  14,  14,  15,  15,   9,   9,  12,
  551.   12,  12,  12,  16,  16,  16,  16,  35,  35,  35,
  552.   35,  35,  35,  35,  35,  35,  35,  35,  35,  35,
  553.   35,  35,  35,  17,  17,  17,  17,  17,  17,  17,
  554.   32,  32,  32,  50,  50,  50,  50,  50,  50,  50,
  555.   50,  65,  70,  66,  67,  67,  67,  67,  67,  68,
  556.   68,  68,  69,  69,  69,  72,  72,  72,  72,  71,
  557.   71,  71,  71,   1,   1,   1,  18,  18,  19,   3,
  558.    3,   4,   4,   5,   2,   2,   6,   6,   6,  37,
  559.   37,  37,  37,  37,  37,  37,  37,  37,  37,  37,
  560.   37,  37,  37 };
  561. short yyr2[]={
  562.  
  563.    0,   0,   2,   2,   2,   1,   0,   1,   2,   3,
  564.    2,   3,   2,   6,   3,   6,   3,   8,   2,   1,
  565.    3,   1,   1,   1,   1,   1,   1,   1,   1,   0,
  566.    1,   1,   0,   1,   1,   2,   2,   2,   2,   2,
  567.    2,   2,   1,   2,   2,   2,   2,   2,   2,   2,
  568.    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
  569.    2,   2,   2,   2,   2,   2,   2,   4,   1,   1,
  570.    0,   3,   3,   3,   3,   3,   3,   3,   3,   3,
  571.    3,   3,   3,   3,   3,   1,   1,   3,   3,   1,
  572.    3,   3,   1,   1,   3,   3,   1,   1,   1,   1,
  573.    1,   1,   4,   2,   4,   4,   1,   1,   1,   1,
  574.    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
  575.    1,   1,   1,   1,   1,   1,   1,   1,   1,   3,
  576.    3,   4,   4,   4,   1,   1,   2,   2,   2,   6,
  577.    5,   1,   1,   1,   1,   2,   2,   2,   2,   4,
  578.    3,   1,   1,   1,   2,   2,   2,   3,   2,   1,
  579.    4,   3,   3,   4,   4,   3,   4,   4,   3,   5,
  580.    4,   5,   5,   4,   4,   1,   1,   1,   4,   4,
  581.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  582.    3,   5,   4,   5,   5,   4,   4,   1,   1,   1,
  583.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  584.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  585.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  586.    1,   3,   3,   1,   4,   4,   4,   4,   3,   7,
  587.    6,   7,   7,   6,   7,   4,   4,   4,   4,   8,
  588.    8,   8,   8,   1,   1,   1,   2,   3,   3,   1,
  589.    1,   2,   2,   2,   1,   1,   1,   1,   1,   3,
  590.    3,   3,   3,   3,   3,   3,   3,   3,   3,   2,
  591.    2,   3,   1 };
  592. short yychk[]={
  593.  
  594. -1000, -38, -39, -40, 256, 276, -41, -43, 273, 366,
  595.  362, 365, 346, 364, 298, 299, -42, 276, -44, 363,
  596.  -47, -48, -49, -51, -52, -53, -54, 313, 314, 311,
  597.  312, 319, 302, 341, 322, 308, 309, 317, 303, 307,
  598.  320, 329, 304, 323, 321, 324, 330, 326, 306, 328,
  599.  300, 333, 305, 327, 315, 332, 301, 318, 271, 270,
  600.  350, 347, 352, 351, 349, 348, 354, 338, 339, 358,
  601.  360, 355, 357, 359, 345, 356, 353, 337, 336, 335,
  602.  334, 344, 343, 342, 340, 272, 316, 310, -55, -56,
  603.  331, 325, -42, 361, 273, -34, 280, 277, 278, 279,
  604.   -1, 257, 258, 259, 274, -42, -45, -46, 274, -37,
  605.   45, 126,  40,  -6,  -1, 273, 275, -50, -65, -66,
  606.  -67, -68, -69, -70, -71, -72, -18, -16,  -8, -35,
  607.  -19, 279,  35,  40, 277, 278, 265, 266, 260, 261,
  608.  281, 283, 264, 263, 262, -17, 282, 284, 287, 288,
  609.  285, 286, 289, 292, 293, 294, 295, 296, 297, -28,
  610.  -30,  43,  45, -28, -28, -28, -20, 283, 281, 287,
  611.  288, 265, 266, -20, -21, 283, 281, 265, 266, -21,
  612.  -21, -22, 281, 283, -22, -22, -22, -22, -23, -22,
  613.  -23, -23, -24, 265, 266, -24, -24, -25,  -7, 281,
  614.  283, -25, -25, -25, -26,  -7, -26, -26, -26, -27,
  615.  287, 288, -27, -15,  -9,  -4,  -3, -12,  60, -37,
  616.   42, -16,  40,  45, -15, -15, -15, -57, -10, -18,
  617.   35, -57, -57, -57, -58, -18, -35,  -8, -59, -18,
  618.  -35,  -8, -60, -10, -60, -60, -60, -61,  -8, -18,
  619.  280, -35, -62, -35, 280, -63,  -8, -35, -18, -16,
  620.  -64, -33, -35, 264, -31, -35, -18, -18, -37, -34,
  621.  -37,  44,  44, 124,  94,  38, 368, 367,  45,  43,
  622.   37,  47,  42, -37, -37, -37,  44,  -9,  -4,  44,
  623.   44,  -9,  -4, -37,  60,  62, 264, -29, 265, 266,
  624.   44,  44,  44,  44,  44,  44,  44,  44,  44,  44,
  625.   44,  44,  44,  44,  44,  44, -37,  42, 264,  40,
  626.   44, -12,  -3,  -4,  44,  44, -12,  -4,  -3,  44,
  627.  -36,  -3,  -5, -12, 367,  44,  -9,  44,  44, -14,
  628.   -9,  -4,  -9,  -4,  44,  44, -35, 264,  44,  44,
  629.   44,  44,  44, -37,  44,  -1, -46, -37, -37, -37,
  630.  -37, -37, -37, -37, -37, -37, -37,  41, -35,  44,
  631.   44, -35,  -8, 279, -35,  44,  44, -37, -37,  41,
  632.   44,  44,  44, 281, 283,  -7,  -7,  -7,  -7, 281,
  633.  283,  -7,  -7, 283, 281,  -7,  -7,  -7,  -7,  41,
  634.   43, 264,  -8, -35,  -3,  -3,  44,  44,  44,  -8,
  635.  -35,  44, -37,  -8,  44,  -8, 280,  44,  44,  44,
  636.   -8, -35, -35,  44, -35,  -7, -35, -32, 290, 291,
  637.  292, -32,  58, -34,  44, -35, -35, -35, 278, -18,
  638.  -35,  -9,  -4,  -9,  -4, -35, -35,  45,  43,  -7,
  639.  265, 266, 266, 265, 263,  41, -11,  -3,  -4,  -5,
  640.  -12,  44,  -3,  -3,  -3, -13,  -5,  -4,  -9,  -8,
  641.  280, -35,  -2,  -1, 273,  -8,  -2, -14, -35, -35,
  642.  -35,  -9,  -4, 264, -37, -37,  -1,  44, -35, 278,
  643.   -9,  44,  44, -35, 278, 263, 263,  41,  44,  -3,
  644.  -36,  -9,  -2,  44, 266,  44,  -9,  44, -35, 278,
  645.   44,  -9,  -3,  -1, 266, 278,  44, -35,  -9, -35,
  646.  278,  44,  -9, -35,  -9, -35 };
  647. short yydef[]={
  648.  
  649.    1,  -2,   2,   0,   5,   7,  32,   0,  -2,   0,
  650.    0,   0,   0,  19,   3,   4,   8,  31,  32,   0,
  651.   30,  33,  34,  98,  99, 100, 101,  70,  70,  70,
  652.   70,   0,   0,  42,   0,   0,   0,   0,   0,   0,
  653.    0,   0,   0,   0,   0, 108, 106,   0,   0,   0,
  654.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  655.    0,   0,   0,   0,   0,   0,   0,   0, 120, 121,
  656.  122, 123, 124, 125, 126, 127, 128,   0,   0,   0,
  657.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  658.  107, 109,  10,   0,  12,   0,  24,  25,  26,  27,
  659.    0, 253, 254, 255,  18,   9,  16,  21,  22,  23,
  660.    0,   0,   0, 282, 266, 267, 268,  35, 223, 224,
  661.  225, 226, 227, 228, 229, 230,   0, 233,   0,   0,
  662.    0,   0,   0,   0, 181, 182, 197, 198, 199, 200,
  663.  201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
  664.  211, 212, 213, 214, 215, 216, 217, 218, 219,  36,
  665.    0,  68,  69,  37,  38,  39,  40,   0,   0,   0,
  666.    0,   0,   0,  41,  43,   0,   0,   0,   0,  44,
  667.   45,  46,  85,  86,  47,  48,  49,  50,  51,  89,
  668.   52,  53,  54,   0,   0,  55,  56,  57,  92,  96,
  669.   97,  58,  59,  60,  61,  93,  62,  63,  64,  65,
  670.    0,   0,  66, 110, 185, 186, 187, 188,   0, 259,
  671.  260, 189,   0,   0, 111, 112, 113, 114,   0, 180,
  672.    0, 115, 116, 117, 118, 134, 135,   0, 119,   0,
  673.    0,   0, 145,   0, 146, 147, 148, 154,   0,   0,
  674.    0,   0, 155,   0,   0, 156,   0,   0,   0,   0,
  675.  158, 159,   0,   0, 103,   0,   0,   0,  11,   0,
  676.   14,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  677.    0,   0,   0, 279, 280,   0,   0,   0,   0,   0,
  678.    0,   0,   0, 256,   0,   0,   0,   0,   0,   0,
  679.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  680.    0,   0,   0,   0,   0,   0, 261, 262,   0,   0,
  681.    0, 136, 137, 138,   0,   0,   0,   0,   0,   0,
  682.    0, 175, 176, 177,   0,   0,   0,   0,   0,   0,
  683.  183, 184,   0,   0,   0,   0, 157,   0,   0,   0,
  684.    0,   0,   0,   0,   0,   0,  20, 269, 270, 271,
  685.  272, 273, 274, 275, 276, 277, 278, 281, 231,   0,
  686.    0, 232,   0,   0, 238,   0,   0, 257, 258,   0,
  687.    0,   0,   0,  75,  76,  77,  78,  79,  80,  81,
  688.   82,  83,  84,  88,  87,  90,  91,  94,  95, 190,
  689.    0,   0,   0,   0, 129, 130,   0,   0,   0,   0,
  690.  150,   0, 263,   0,   0,   0,   0,   0,   0,   0,
  691.    0, 168, 165,   0, 161, 102, 162, 104, 220, 221,
  692.  222, 105,   0,   0,   0,   0, 234, 235,   0,   0,
  693.    0, 236, 237, 246, 248, 245, 247, 195, 196,  67,
  694.   71,  73,  72,  74,   0, 192,   0, 141, 142, 143,
  695.  144,   0, 131, 132, 133, 149, 151, 152, 153,   0,
  696.    0, 174, 170, 264, 265,   0, 173, 178, 179, 163,
  697.  166, 164, 167, 160,  13,  15,   0,   0,   0,   0,
  698.    0,   0,   0,   0,   0, 193, 194, 191,   0, 140,
  699.  169, 172, 171,   0, 240,   0,   0,   0, 243,   0,
  700.    0,   0, 139,  17, 239,   0,   0, 242, 244, 241,
  701.    0,   0, 250, 249, 252, 251 };
  702. #ifndef lint
  703. static char yaccpar_sccsid[] = "@(#)yaccpar    4.1    (Berkeley)    2/11/83";
  704. #endif not lint
  705.  
  706. #
  707. # define YYFLAG -1000
  708. # define YYERROR goto yyerrlab
  709. # define YYACCEPT return(0)
  710. # define YYABORT return(1)
  711.  
  712. /*    parser for yacc output    */
  713.  
  714. #ifdef YYDEBUG
  715. int yydebug = 0; /* 1 for debugging */
  716. #endif
  717. YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
  718. int yychar = -1; /* current input token number */
  719. int yynerrs = 0;  /* number of errors */
  720. short yyerrflag = 0;  /* error recovery flag */
  721.  
  722. yyparse() {
  723.  
  724.     short yys[YYMAXDEPTH];
  725.     short yyj, yym;
  726.     register YYSTYPE *yypvt;
  727.     register short yystate, *yyps, yyn;
  728.     register YYSTYPE *yypv;
  729.     register short *yyxi;
  730.  
  731.     yystate = 0;
  732.     yychar = -1;
  733.     yynerrs = 0;
  734.     yyerrflag = 0;
  735.     yyps= &yys[-1];
  736.     yypv= &yyv[-1];
  737.  
  738.  yystack:    /* put a state and value onto the stack */
  739.  
  740. #ifdef YYDEBUG
  741.     if( yydebug  ) printf( "state %d, char 0%o\n", yystate, yychar );
  742. #endif
  743.         if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
  744.         *yyps = yystate;
  745.         ++yypv;
  746.         *yypv = yyval;
  747.  
  748.  yynewstate:
  749.  
  750.     yyn = yypact[yystate];
  751.  
  752.     if( yyn<= YYFLAG ) goto yydefault; /* simple state */
  753.  
  754.     if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
  755.     if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
  756.  
  757.     if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
  758.         yychar = -1;
  759.         yyval = yylval;
  760.         yystate = yyn;
  761.         if( yyerrflag > 0 ) --yyerrflag;
  762.         goto yystack;
  763.         }
  764.  
  765.  yydefault:
  766.     /* default state action */
  767.  
  768.     if( (yyn=yydef[yystate]) == -2 ) {
  769.         if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
  770.         /* look through exception table */
  771.  
  772.         for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
  773.  
  774.         while( *(yyxi+=2) >= 0 ){
  775.             if( *yyxi == yychar ) break;
  776.             }
  777.         if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
  778.         }
  779.  
  780.     if( yyn == 0 ){ /* error */
  781.         /* error ... attempt to resume parsing */
  782.  
  783.         switch( yyerrflag ){
  784.  
  785.         case 0:   /* brand new error */
  786.  
  787.             yyerror( "syntax error" );
  788.         yyerrlab:
  789.             ++yynerrs;
  790.  
  791.         case 1:
  792.         case 2: /* incompletely recovered error ... try again */
  793.  
  794.             yyerrflag = 3;
  795.  
  796.             /* find a state where "error" is a legal shift action */
  797.  
  798.             while ( yyps >= yys ) {
  799.                yyn = yypact[*yyps] + YYERRCODE;
  800.                if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
  801.                   yystate = yyact[yyn];  /* simulate a shift of "error" */
  802.                   goto yystack;
  803.                   }
  804.                yyn = yypact[*yyps];
  805.  
  806.                /* the current yyps has no shift onn "error", pop stack */
  807.  
  808. #ifdef YYDEBUG
  809.                if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
  810. #endif
  811.                --yyps;
  812.                --yypv;
  813.                }
  814.  
  815.             /* there is no state on the stack with an error shift ... abort */
  816.  
  817.     yyabort:
  818.             return(1);
  819.  
  820.  
  821.         case 3:  /* no shift yet; clobber input char */
  822.  
  823. #ifdef YYDEBUG
  824.             if( yydebug ) printf( "error recovery discards char %d\n", yychar );
  825. #endif
  826.  
  827.             if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
  828.             yychar = -1;
  829.             goto yynewstate;   /* try again in the same state */
  830.  
  831.             }
  832.  
  833.         }
  834.  
  835.     /* reduction by production yyn */
  836.  
  837. #ifdef YYDEBUG
  838.         if( yydebug ) printf("reduce %d\n",yyn);
  839. #endif
  840.         yyps -= yyr2[yyn];
  841.         yypvt = yypv;
  842.         yypv -= yyr2[yyn];
  843.         yyval = yypv[1];
  844.         yym=yyn;
  845.             /* consult goto table to find next state */
  846.         yyn = yyr1[yyn];
  847.         yyj = yypgo[yyn] + *yyps + 1;
  848.         if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
  849.         switch(yym){
  850.             
  851. case 3:
  852. # line 212 "a56.y"
  853. {substatement = 0;
  854.             if(NOT check_psect(seg, pc) && pass == 2)
  855.                 yyerror("psect violation");
  856.             } break;
  857. case 4:
  858. # line 217 "a56.y"
  859. {substatement++;
  860.             if(NOT check_psect(seg, pc) && pass == 2)
  861.                 yyerror("psect violation");
  862.             } break;
  863. case 6:
  864. # line 226 "a56.y"
  865. {if(pass == 2 && list_on) {
  866.                 printf("\n");
  867.             }} break;
  868. case 7:
  869. # line 230 "a56.y"
  870. {if(pass == 2 && NOT substatement && list_on) {
  871.                 printf("%s%s\n", spaces(0), luntab(inline));
  872.             }} break;
  873. case 9:
  874. # line 235 "a56.y"
  875. {char *printcode();
  876.             if(pass == 2) {
  877.                 gencode(seg, pc, w0);
  878.                 if(list_on) printf("%c:%04X %s %s\n", segs[seg], pc, 
  879.                     printcode(w0), substatement ? "" :
  880.                         luntab(inline));
  881.                 pc++;
  882.                 if(uses_w1) {
  883.                     gencode(seg, pc, w1);
  884.                     if(list_on) printf("%c:%04X %s\n", segs[seg], pc,
  885.                                printcode(w1 & 0xFFFFFF));
  886.                     pc++;
  887.                 }
  888.             } else {
  889.                 pc++;
  890.                 if(uses_w1)
  891.                     pc++;
  892.             }
  893.             w0 = w1 = 0; uses_w1 = FALSE;} break;
  894. case 10:
  895. # line 255 "a56.y"
  896. {sym_def(yypvt[-1].sval, pc);
  897.             free(yypvt[-1].sval);
  898.             if(pass == 2) {
  899.                 if(list_on) printf("%c:%04X%s%s\n", segs[seg], pc, 
  900.                     spaces(14-8), substatement ? "" :
  901.                         luntab(inline));
  902.             }} break;
  903. case 11:
  904. # line 266 "a56.y"
  905. {sym_def(yypvt[-2].sval, yypvt[-0].ival);
  906.             free(yypvt[-2].sval);
  907.             if(pass == 2) {
  908.                 if(list_on) printf("%06X%s%s\n", yypvt[-0].ival & 0xFFFFFF, 
  909.                     spaces(14-6-2), 
  910.                     substatement ? "" : luntab(inline));
  911.             }} break;
  912. case 12:
  913. # line 274 "a56.y"
  914. {struct psect *pp = find_psect(yypvt[-0].sval);
  915.             if(NOT pp) {
  916.                 if(pass == 2)
  917.                     yyerror("undefined psect");
  918.             } else {
  919.                 seg = pp->seg;
  920.                 pc = pp->pc;
  921.                 set_psect(pp);
  922.                 if(pass == 2) {
  923.                     if(list_on) printf("%c:%04X%s%s\n", 
  924.                         segs[seg], pc, 
  925.                         spaces(14-8), substatement ? "" : luntab(inline));
  926.                 }
  927.             }
  928.             free(yypvt[-0].sval);} break;
  929. case 13:
  930. # line 290 "a56.y"
  931. {new_psect(yypvt[-4].sval, yypvt[-3].ival, yypvt[-2].ival, yypvt[-0].ival);
  932.             if(pass == 2) {
  933.                 if(list_on) printf("%c:%04X %04X%s%s\n", 
  934.                     segs[yypvt[-3].ival], yypvt[-2].ival, yypvt[-0].ival, spaces(14-8+4+1), 
  935.                     substatement ? "" : luntab(inline));
  936.             }} break;
  937. case 14:
  938. # line 297 "a56.y"
  939. {pc = yypvt[-0].ival;
  940.             seg = yypvt[-1].ival;
  941.             if(pass == 2) {
  942.                 if(list_on) printf("%c:%04X%s%s\n", segs[seg], pc, 
  943.                     spaces(14-8), substatement ? "" : luntab(inline));
  944.             }} break;
  945. case 15:
  946. # line 304 "a56.y"
  947. {pc = yypvt[-3].ival;
  948.             seg = yypvt[-4].ival;
  949.             if(pass == 2) {
  950.                 if(list_on) printf("%c:%04X%s%s\n", segs[seg], pc, 
  951.                     spaces(14-8), substatement ? "" : luntab(inline));
  952.             }} break;
  953. case 17:
  954. # line 312 "a56.y"
  955. {if(pass == 2 && NOT substatement && list_on) {
  956.                 printf("%s%s\n", spaces(0), luntab(inline));
  957.             }} break;
  958. case 18:
  959. # line 316 "a56.y"
  960. {if(pass == 2 && NOT substatement && list_on) {
  961.                 printf("%s%s\n", spaces(0), luntab(inline));
  962.             }
  963.             include(yypvt[-0].sval); /* free($2); */
  964.             } break;
  965. case 19:
  966. # line 322 "a56.y"
  967. {if(pass == 2 && NOT substatement && list_on) {
  968.                 printf("%s%s\n", spaces(0), luntab(inline));
  969.             }} break;
  970. case 22:
  971. # line 334 "a56.y"
  972. {int len = strlen(yypvt[-0].sval), i; char *cp; w0 = 0;
  973.             if(len % 3 == 2)
  974.                 len++;    /* force empty word */
  975.             for(i = 0, cp = yypvt[-0].sval; i < len; i++, cp++) {
  976.                 w0 |= (*cp & 0xFF) << (2 - (i % 3)) * 8;
  977.                 if(i % 3 == 2 || i == len - 1) {
  978.                     if(pass == 2) {
  979.                         if(list_on) printf("%c:%04X %06X%s%s\n",
  980.                             segs[seg], pc, w0, 
  981.                             spaces(14-6+5), 
  982.                             substatement ? "" : luntab(inline));
  983.                         gencode(seg, pc, w0);
  984.                         substatement++;
  985.                     }
  986.                     pc++; w0 = 0;
  987.                 }
  988.             }
  989.             free(yypvt[-0].sval);} break;
  990. case 23:
  991. # line 353 "a56.y"
  992. {if(pass == 2) {
  993.                 if(list_on) printf("%c:%04X %06X%s%s\n", 
  994.                     segs[seg], pc,
  995.                     yypvt[-0].ival & 0xFFFFFF, spaces(14-6+5),
  996.                     substatement ? "" : luntab(inline));
  997.                 gencode(seg, pc, yypvt[-0].ival);
  998.                 substatement++;
  999.             }
  1000.             pc++;} break;
  1001. case 24:
  1002. # line 364 "a56.y"
  1003. {yyval.ival = PROG;} break;
  1004. case 25:
  1005. # line 366 "a56.y"
  1006. {yyval.ival = XDATA;} break;
  1007. case 26:
  1008. # line 368 "a56.y"
  1009. {yyval.ival = YDATA;} break;
  1010. case 27:
  1011. # line 370 "a56.y"
  1012. {yyval.ival = LDATA;} break;
  1013. case 28:
  1014. # line 375 "a56.y"
  1015. {sym_def(yypvt[-0].sval, pc);
  1016.             free(yypvt[-0].sval);} break;
  1017. case 30:
  1018. # line 382 "a56.y"
  1019. {if(just_rep) 
  1020.                 just_rep--;} break;
  1021. case 34:
  1022. # line 394 "a56.y"
  1023. {w0 |= 0x200000;} break;
  1024. case 36:
  1025. # line 403 "a56.y"
  1026. {w0 |= 0x80 | yypvt[-0].ival << 2;} break;
  1027. case 37:
  1028. # line 405 "a56.y"
  1029. {w0 |= 0x81 | yypvt[-0].ival << 2;} break;
  1030. case 38:
  1031. # line 407 "a56.y"
  1032. {w0 |= 0x82 | yypvt[-0].ival << 2;} break;
  1033. case 39:
  1034. # line 409 "a56.y"
  1035. {w0 |= 0x83 | yypvt[-0].ival << 2;} break;
  1036. case 40:
  1037. # line 412 "a56.y"
  1038. {w0 |= 0x04 | yypvt[-0].ival << 3;} break;
  1039. case 41:
  1040. # line 414 "a56.y"
  1041. {w0 |= 0x00 | yypvt[-0].ival << 3;} break;
  1042. case 42:
  1043. # line 416 "a56.y"
  1044. {w0 |= 0x00;} break;
  1045. case 43:
  1046. # line 419 "a56.y"
  1047. {w0 |= 0x01 | yypvt[-0].ival << 3;} break;
  1048. case 44:
  1049. # line 421 "a56.y"
  1050. {w0 |= 0x05 | yypvt[-0].ival << 3;} break;
  1051. case 45:
  1052. # line 423 "a56.y"
  1053. {w0 |= 0x07 | yypvt[-0].ival << 3;} break;
  1054. case 46:
  1055. # line 426 "a56.y"
  1056. {w0 |= 0x11 | yypvt[-0].ival << 3;} break;
  1057. case 47:
  1058. # line 428 "a56.y"
  1059. {w0 |= 0x12 | yypvt[-0].ival << 3;} break;
  1060. case 48:
  1061. # line 430 "a56.y"
  1062. {w0 |= 0x13 | yypvt[-0].ival << 3;} break;
  1063. case 49:
  1064. # line 432 "a56.y"
  1065. {w0 |= 0x16 | yypvt[-0].ival << 3;} break;
  1066. case 50:
  1067. # line 434 "a56.y"
  1068. {w0 |= 0x17 | yypvt[-0].ival << 3;} break;
  1069. case 51:
  1070. # line 437 "a56.y"
  1071. {w0 |= 0x02 | yypvt[-0].ival << 3;} break;
  1072. case 52:
  1073. # line 439 "a56.y"
  1074. {w0 |= 0x03 | yypvt[-0].ival << 3;} break;
  1075. case 53:
  1076. # line 441 "a56.y"
  1077. {w0 |= 0x06 | yypvt[-0].ival << 3;} break;
  1078. case 54:
  1079. # line 444 "a56.y"
  1080. {w0 |= 0x46 | yypvt[-0].ival << 3;} break;
  1081. case 55:
  1082. # line 446 "a56.y"
  1083. {w0 |= 0x42 | yypvt[-0].ival << 3;} break;
  1084. case 56:
  1085. # line 448 "a56.y"
  1086. {w0 |= 0x43 | yypvt[-0].ival << 3;} break;
  1087. case 57:
  1088. # line 451 "a56.y"
  1089. {w0 |= 0x22 | yypvt[-0].ival << 3;} break;
  1090. case 58:
  1091. # line 453 "a56.y"
  1092. {w0 |= 0x23 | yypvt[-0].ival << 3;} break;
  1093. case 59:
  1094. # line 455 "a56.y"
  1095. {w0 |= 0x26 | yypvt[-0].ival << 3;} break;
  1096. case 60:
  1097. # line 457 "a56.y"
  1098. {w0 |= 0x27 | yypvt[-0].ival << 3;} break;
  1099. case 61:
  1100. # line 460 "a56.y"
  1101. {w0 |= 0x32 | yypvt[-0].ival << 3;} break;
  1102. case 62:
  1103. # line 462 "a56.y"
  1104. {w0 |= 0x33 | yypvt[-0].ival << 3;} break;
  1105. case 63:
  1106. # line 464 "a56.y"
  1107. {w0 |= 0x36 | yypvt[-0].ival << 3;} break;
  1108. case 64:
  1109. # line 466 "a56.y"
  1110. {w0 |= 0x37 | yypvt[-0].ival << 3;} break;
  1111. case 65:
  1112. # line 469 "a56.y"
  1113. {w0 |= 0x21 | yypvt[-0].ival << 3;} break;
  1114. case 66:
  1115. # line 471 "a56.y"
  1116. {w0 |= 0x25 | yypvt[-0].ival << 3;} break;
  1117. case 67:
  1118. # line 475 "a56.y"
  1119. {yyval.ival = yypvt[-3].ival | yypvt[-0].ival << 1 | yypvt[-2].ival << 2;} break;
  1120. case 68:
  1121. # line 480 "a56.y"
  1122. {yyval.ival = 0;} break;
  1123. case 69:
  1124. # line 482 "a56.y"
  1125. {yyval.ival = 1;} break;
  1126. case 70:
  1127. # line 484 "a56.y"
  1128. {yyval.ival = 0;} break;
  1129. case 71:
  1130. # line 489 "a56.y"
  1131. {switch (yypvt[-2].ival << 4 | yypvt[-0].ival) {
  1132.                 case 0x00: yyval.ival = 0x0; break;
  1133.                 case 0x01: 
  1134.                 case 0x10: yyval.ival = 0x2; break;
  1135.                 case 0x11: 
  1136.                     yyerror("illegal source operands"); 
  1137.                     break;
  1138.             }} break;
  1139. case 72:
  1140. # line 498 "a56.y"
  1141. {switch (yypvt[-2].ival << 4 | yypvt[-0].ival) {
  1142.                 case 0x00: yyval.ival = 0x1; break;
  1143.                 case 0x01: 
  1144.                 case 0x10: yyval.ival = 0x3; break;
  1145.                 case 0x11: 
  1146.                     yyerror("illegal source operands"); 
  1147.                     break;
  1148.             }} break;
  1149. case 73:
  1150. # line 507 "a56.y"
  1151. {switch (yypvt[-2].ival << 4 | yypvt[-0].ival) {
  1152.                 case 0x00: yyval.ival = 0x5; break;
  1153.                 case 0x01: yyval.ival = 0x4; break;
  1154.                 case 0x10: yyval.ival = 0x6; break;
  1155.                 case 0x11: yyval.ival = 0x7; break;
  1156.             }} break;
  1157. case 74:
  1158. # line 514 "a56.y"
  1159. {switch (yypvt[-2].ival << 4 | yypvt[-0].ival) {
  1160.                 case 0x00: yyval.ival = 0x5; break;
  1161.                 case 0x01: yyval.ival = 0x6; break;
  1162.                 case 0x10: yyval.ival = 0x4; break;
  1163.                 case 0x11: yyval.ival = 0x7; break;
  1164.             }} break;
  1165. case 75:
  1166. # line 523 "a56.y"
  1167. {yyval.ival = 0x2;} break;
  1168. case 76:
  1169. # line 525 "a56.y"
  1170. {yyval.ival = 0x3;} break;
  1171. case 77:
  1172. # line 527 "a56.y"
  1173. {yyval.ival = 0x4 | yypvt[-0].ival;} break;
  1174. case 78:
  1175. # line 529 "a56.y"
  1176. {yyval.ival = 0x6 | yypvt[-0].ival;} break;
  1177. case 79:
  1178. # line 531 "a56.y"
  1179. {yyval.ival = 0x8 | yypvt[-2].ival << 2 | yypvt[-0].ival;} break;
  1180. case 80:
  1181. # line 533 "a56.y"
  1182. {yyval.ival = 0xA | yypvt[-2].ival << 2 | yypvt[-0].ival;} break;
  1183. case 81:
  1184. # line 537 "a56.y"
  1185. {yyval.ival = 0x2;} break;
  1186. case 82:
  1187. # line 539 "a56.y"
  1188. {yyval.ival = 0x3;} break;
  1189. case 83:
  1190. # line 541 "a56.y"
  1191. {yyval.ival = 0x8 | yypvt[-2].ival << 2 | yypvt[-0].ival;} break;
  1192. case 84:
  1193. # line 543 "a56.y"
  1194. {yyval.ival = 0xA | yypvt[-2].ival << 2 | yypvt[-0].ival;} break;
  1195. case 85:
  1196. # line 547 "a56.y"
  1197. {yyval.ival = 0x0;} break;
  1198. case 86:
  1199. # line 549 "a56.y"
  1200. {yyval.ival = 0x1;} break;
  1201. case 87:
  1202. # line 551 "a56.y"
  1203. {yyval.ival = 0x0;} break;
  1204. case 88:
  1205. # line 553 "a56.y"
  1206. {yyval.ival = 0x1;} break;
  1207. case 89:
  1208. # line 557 "a56.y"
  1209. {yyval.ival = yypvt[-0].ival;} break;
  1210. case 90:
  1211. # line 561 "a56.y"
  1212. {yyval.ival = 0x0 | yypvt[-2].ival << 2 | yypvt[-0].ival;} break;
  1213. case 91:
  1214. # line 563 "a56.y"
  1215. {yyval.ival = 0x2 | yypvt[-2].ival << 2 | yypvt[-0].ival;} break;
  1216. case 92:
  1217. # line 567 "a56.y"
  1218. {yyval.ival = yypvt[-0].ival;} break;
  1219. case 93:
  1220. # line 571 "a56.y"
  1221. {yyval.ival = yypvt[-0].ival;} break;
  1222. case 94:
  1223. # line 575 "a56.y"
  1224. {yyval.ival = 0x0 | yypvt[-0].ival;} break;
  1225. case 95:
  1226. # line 577 "a56.y"
  1227. {yyval.ival = 0x2 | yypvt[-0].ival;} break;
  1228. case 96:
  1229. # line 581 "a56.y"
  1230. {yyval.ival = 0;} break;
  1231. case 97:
  1232. # line 583 "a56.y"
  1233. {yyval.ival = 1;} break;
  1234. case 98:
  1235. # line 588 "a56.y"
  1236. {if(just_rep == 1)
  1237.                 yyerror("instruction not allowed after REP");} break;
  1238. case 102:
  1239. # line 599 "a56.y"
  1240. {w0 |= 0x01D815 | yypvt[-2].ival << 8 | yypvt[-0].ival << 3;} break;
  1241. case 103:
  1242. # line 601 "a56.y"
  1243. {w0 |= 0x018040 | yypvt[-0].ival << 3;} break;
  1244. case 104:
  1245. # line 603 "a56.y"
  1246. {w0 |= 0x0000F8 | (yypvt[-2].ival & 0xFF) << 8 | yypvt[-0].ival;} break;
  1247. case 105:
  1248. # line 605 "a56.y"
  1249. {w0 |= 0x0000B8 | (yypvt[-2].ival & 0xFF) << 8 | yypvt[-0].ival;} break;
  1250. case 110:
  1251. # line 620 "a56.y"
  1252. {if(yypvt[-0].ival) {
  1253.                 w0 |= 0x0BC0A0 | yypvt[-1].cond << 0;
  1254.             } else {
  1255.                 w0 |= 0x0F0000 | yypvt[-1].cond << 12;
  1256.             }} break;
  1257. case 111:
  1258. # line 626 "a56.y"
  1259. {if(yypvt[-0].ival) {
  1260.                 w0 |= 0x0AC0A0 | yypvt[-1].cond << 0;
  1261.             } else {
  1262.                 w0 |= 0x0E0000 | yypvt[-1].cond << 12;
  1263.             }} break;
  1264. case 112:
  1265. # line 632 "a56.y"
  1266. {if(yypvt[-0].ival) {
  1267.                 w0 |= 0x0BC080;
  1268.             } else {
  1269.                 w0 |= 0x0D0000;
  1270.             }} break;
  1271. case 113:
  1272. # line 638 "a56.y"
  1273. {if(yypvt[-0].ival) {
  1274.                 w0 |= 0x0AC080;
  1275.             } else {
  1276.                 w0 |= 0x0C0000;
  1277.             }} break;
  1278. case 114:
  1279. # line 645 "a56.y"
  1280. {w0 |= 0x0B0020;} break;
  1281. case 115:
  1282. # line 647 "a56.y"
  1283. {w0 |= 0x0B0000;} break;
  1284. case 116:
  1285. # line 649 "a56.y"
  1286. {w0 |= 0x0A0020;} break;
  1287. case 117:
  1288. # line 651 "a56.y"
  1289. {w0 |= 0x0A0000;} break;
  1290. case 118:
  1291. # line 654 "a56.y"
  1292. {just_rep = 2;} break;
  1293. case 119:
  1294. # line 656 "a56.y"
  1295. {uses_w1++;} break;
  1296. case 120:
  1297. # line 658 "a56.y"
  1298. {w0 |= 0x00008C;} break;
  1299. case 121:
  1300. # line 660 "a56.y"
  1301. {w0 |= 0x000087;} break;
  1302. case 122:
  1303. # line 662 "a56.y"
  1304. {w0 |= 0x000086;} break;
  1305. case 123:
  1306. # line 664 "a56.y"
  1307. {w0 |= 0x000084;} break;
  1308. case 124:
  1309. # line 666 "a56.y"
  1310. {w0 |= 0x00000C;} break;
  1311. case 125:
  1312. # line 668 "a56.y"
  1313. {w0 |= 0x000006;} break;
  1314. case 126:
  1315. # line 670 "a56.y"
  1316. {w0 |= 0x000005;} break;
  1317. case 127:
  1318. # line 672 "a56.y"
  1319. {w0 |= 0x000004;} break;
  1320. case 128:
  1321. # line 674 "a56.y"
  1322. {w0 |= 0x000000;
  1323.             just_rep = 0;} break;
  1324. case 129:
  1325. # line 679 "a56.y"
  1326. {w0 |= 0x060080 | (yypvt[-2].ival & 0xFF) << 8 | (yypvt[-2].ival & 0xF00)>> 8;
  1327.             if(yypvt[-2].ival > 0xFFF && pass == 2) {
  1328.                 yyerror("warning: immediate operand truncated");
  1329.             }
  1330.             w1 |= yypvt[-0].ival-1;} break;
  1331. case 130:
  1332. # line 685 "a56.y"
  1333. {w0 |= 0x06C000 | yypvt[-2].regs.r6 << 8;
  1334.             w1 |= yypvt[-0].ival-1;} break;
  1335. case 131:
  1336. # line 688 "a56.y"
  1337. {w0 |= 0x064000 | yypvt[-2].ival << 8 | yypvt[-3].ival << 6;
  1338.             w1 |= yypvt[-0].ival-1;} break;
  1339. case 132:
  1340. # line 691 "a56.y"
  1341. {w0 |= 0x060000 | (yypvt[-2].ival & 0x3F) << 8 | yypvt[-3].ival << 6;
  1342.             if(yypvt[-2].ival > 0x003F && pass == 2)
  1343.                 yyerror("warning: address operand truncated");
  1344.             w1 |= yypvt[-0].ival-1;} break;
  1345. case 133:
  1346. # line 696 "a56.y"
  1347. {w0 |= 0x060000 | (yypvt[-2].ival & 0x3F) << 8 | yypvt[-3].ival << 6;
  1348.             if(yypvt[-2].ival > 0x003F && pass == 2)
  1349.                 yyerror("warning: address operand truncated");
  1350.             w1 |= yypvt[-0].ival-1;} break;
  1351. case 134:
  1352. # line 704 "a56.y"
  1353. {w0 |= 0x0600A0 | (yypvt[-0].ival & 0xFF) << 8 | (yypvt[-0].ival & 0xF00)>> 8;
  1354.             if(yypvt[-0].ival > 0xFFF && pass == 2) {
  1355.                 yyerror("warning: immediate operand truncated");
  1356.             }} break;
  1357. case 135:
  1358. # line 709 "a56.y"
  1359. {w0 |= 0x06C020 | yypvt[-0].regs.r6 << 8;} break;
  1360. case 136:
  1361. # line 711 "a56.y"
  1362. {w0 |= 0x064020 | yypvt[-1].ival << 6 | yypvt[-0].ival << 8;} break;
  1363. case 137:
  1364. # line 713 "a56.y"
  1365. {w0 |= 0x060020 | yypvt[-1].ival << 6 | (yypvt[-0].ival & 0x3F) << 8;
  1366.             if(yypvt[-0].ival > 0x003F && pass == 2)
  1367.                 yyerror("warning: address operand truncated");
  1368.             } break;
  1369. case 138:
  1370. # line 718 "a56.y"
  1371. {w0 |= 0x060020 | yypvt[-1].ival << 6 | (yypvt[-0].ival & 0x3F) << 8;
  1372.             if(yypvt[-0].ival > 0x003F && pass == 2)
  1373.                 yyerror("warning: address operand truncated");
  1374.             } break;
  1375. case 139:
  1376. # line 726 "a56.y"
  1377. {w0 |= yypvt[-5].ival << 0 | yypvt[-3].ival << 6;
  1378.             uses_w1++;
  1379.             w1 = yypvt[-0].ival;} break;
  1380. case 140:
  1381. # line 730 "a56.y"
  1382. {w0 |= 0x00C000 | yypvt[-4].ival << 0 | yypvt[-2].regs.r6 << 8;
  1383.             uses_w1++;
  1384.             w1 = yypvt[-0].ival;} break;
  1385. case 141:
  1386. # line 741 "a56.y"
  1387. {if(yypvt[-0].ival != -1) {    /* symbol defined */
  1388.                 w0 |= (yypvt[-0].ival & 0x3F) << 8;
  1389.                 if(yypvt[-0].ival >= 0xFFC0) {
  1390.                     w0 |= 0x008080;
  1391.                 } else {
  1392.                     w0 |= 0x000080;
  1393.                     if(yypvt[-0].ival > 0x003F && pass == 2)
  1394.                         yyerror("warning: address operand truncated");
  1395.                 }
  1396.             }} break;
  1397. case 142:
  1398. # line 752 "a56.y"
  1399. {if(yypvt[-0].ival != -1) {
  1400.                 if(yypvt[-0].ival > 0x3F && pass == 2)
  1401.                     yyerror("warning: address operand truncated");
  1402.                 w0 |= 0x000080 | (yypvt[-0].ival & 0x3F) << 8;
  1403.             }} break;
  1404. case 143:
  1405. # line 758 "a56.y"
  1406. {if(yypvt[-0].ival != -1) {
  1407.                 if(yypvt[-0].ival < 0xFFC0 && pass == 2)
  1408.                     yyerror("warning: address operand truncated");
  1409.                 w0 |= 0x008080 | (yypvt[-0].ival & 0x3F) << 8;
  1410.             }} break;
  1411. case 144:
  1412. # line 764 "a56.y"
  1413. {w0 |= 0x004080 | yypvt[-0].ival << 8;} break;
  1414. case 145:
  1415. # line 771 "a56.y"
  1416. {w0 |= 0x0B0020;} break;
  1417. case 146:
  1418. # line 773 "a56.y"
  1419. {w0 |= 0x0B0000;} break;
  1420. case 147:
  1421. # line 775 "a56.y"
  1422. {w0 |= 0x0A0020;} break;
  1423. case 148:
  1424. # line 777 "a56.y"
  1425. {w0 |= 0x0A0000;} break;
  1426. case 149:
  1427. # line 782 "a56.y"
  1428. {w0 |= yypvt[-3].ival << 0 | yypvt[-1].ival << 6;} break;
  1429. case 150:
  1430. # line 784 "a56.y"
  1431. {w0 |= 0x00C040 | yypvt[-2].ival << 0 | yypvt[-0].regs.r6 << 8;} break;
  1432. case 151:
  1433. # line 789 "a56.y"
  1434. {if(yypvt[-0].ival != -1) {
  1435.                 w0 |= (yypvt[-0].ival & 0x3F) << 8 | 0x008000;
  1436.                 if(yypvt[-0].ival < 0xFFC0 && pass == 2)
  1437.                     yyerror("warning: address operand truncated");
  1438.             }} break;
  1439. case 152:
  1440. # line 795 "a56.y"
  1441. {if(yypvt[-0].ival != -1) {
  1442.                 w0 |= (yypvt[-0].ival & 0x3F) << 8 | 0x000000;
  1443.                 if(yypvt[-0].ival > 0x003F && pass == 2)
  1444.                     yyerror("warning: address operand truncated");
  1445.             }} break;
  1446. case 153:
  1447. # line 801 "a56.y"
  1448. {w0 |= 0x004000;} break;
  1449. case 157:
  1450. # line 811 "a56.y"
  1451. {w0 |= 0x044010 | yypvt[-1].ival << 8 | yypvt[-0].regs.r4;} break;
  1452. case 158:
  1453. # line 813 "a56.y"
  1454. {w0 |= yypvt[-1].cond << 12;} break;
  1455. case 159:
  1456. # line 818 "a56.y"
  1457. {w0 |= 0x020000 | yypvt[-0].ival << 3;} break;
  1458. case 160:
  1459. # line 820 "a56.y"
  1460. {w0 |= 0x030000 | yypvt[-3].ival << 3 | yypvt[-2].ival << 8 | yypvt[-0].ival;} break;
  1461. case 161:
  1462. # line 824 "a56.y"
  1463. {if(yypvt[-2].regs.flags & R_AB && yypvt[-0].regs.flags & R_AB) {
  1464.                 if(yypvt[-2].regs.ab == yypvt[-0].regs.ab) 
  1465.                     yyerror("source and dest must be different");
  1466.                 yyval.ival = yypvt[-0].regs.ab;
  1467.             } else if(yypvt[-2].regs.flags & R_XREG && yypvt[-0].regs.flags & R_AB) {
  1468.                 yyval.ival = 0x8 | yypvt[-2].regs.xreg << 2 | yypvt[-0].regs.ab;
  1469.             } else if(yypvt[-2].regs.flags & R_YREG && yypvt[-0].regs.flags & R_AB) {
  1470.                 yyval.ival = 0xA | yypvt[-2].regs.yreg << 2 | yypvt[-0].regs.ab;
  1471.             } else 
  1472.                 yyerror("illegal TCC operands");
  1473.             } break;
  1474. case 162:
  1475. # line 838 "a56.y"
  1476. {if(yypvt[-2].regs.flags & R_XREG && yypvt[-0].regs.flags & R_AB) {
  1477.                 yyval.ival = yypvt[-2].regs.xreg << 2 | yypvt[-0].regs.ab;
  1478.             } else if(yypvt[-2].regs.flags & R_YREG && yypvt[-0].regs.flags & R_AB) {
  1479.                 yyval.ival = yypvt[-2].regs.yreg << 2 | yypvt[-0].regs.ab;
  1480.             }} break;
  1481. case 163:
  1482. # line 847 "a56.y"
  1483. {if(yypvt[-3].ival == 0) {
  1484.                 w0 |= 0x05C020 | yypvt[-0].regs.ctl_reg;
  1485.             } else {
  1486.                 w0 |= 0x05C060 | yypvt[-0].regs.ctl_reg;
  1487.             }} break;
  1488. case 164:
  1489. # line 853 "a56.y"
  1490. {if(yypvt[-1].ival == 0) {
  1491.                 w0 |= 0x054020 | yypvt[-3].regs.ctl_reg;
  1492.             } else {
  1493.                 w0 |= 0x054060 | yypvt[-3].regs.ctl_reg;
  1494.             }} break;
  1495. case 165:
  1496. # line 859 "a56.y"
  1497. {if(yypvt[-2].ival < 256) {
  1498.                 w0 |= 0x0500A0 | (yypvt[-2].ival & 0xFF) << 8 | yypvt[-0].regs.ctl_reg; 
  1499.             } else {
  1500.                 w0 |= 0x05C020 | 0x003400 | yypvt[-0].regs.ctl_reg;
  1501.                 uses_w1++; w1 = yypvt[-2].ival & 0xFFFF;
  1502.             }} break;
  1503. case 166:
  1504. # line 866 "a56.y"
  1505. {if(yypvt[-3].ival == 0) {
  1506.                 w0 |= 0x058020 | (yypvt[-2].ival & 0x3F) << 8 | yypvt[-0].regs.ctl_reg;
  1507.             } else {
  1508.                 w0 |= 0x058060 | (yypvt[-2].ival & 0x3F) << 8 | yypvt[-0].regs.ctl_reg;
  1509.             }
  1510.             if(yypvt[-2].ival > 0x003F && pass == 2)
  1511.                 yyerror("warning: address operand truncated");
  1512.             } break;
  1513. case 167:
  1514. # line 875 "a56.y"
  1515. {if(yypvt[-1].ival == 0) {
  1516.                 w0 |= 0x050020 | (yypvt[-0].ival & 0x3F) << 8 | yypvt[-3].regs.ctl_reg;
  1517.             } else {
  1518.                 w0 |= 0x050060 | (yypvt[-0].ival & 0x3F) << 8 | yypvt[-3].regs.ctl_reg;
  1519.             }
  1520.             if(yypvt[-0].ival > 0x003F && pass == 2)
  1521.                 yyerror("warning: address operand truncated");
  1522.             } break;
  1523. case 168:
  1524. # line 884 "a56.y"
  1525. {if(yypvt[-2].regs.flags & R_CTL_REG) {
  1526.                 w0 |= 0x0440A0 | yypvt[-0].regs.r6 << 8 | yypvt[-2].regs.ctl_reg;
  1527.             } else if(yypvt[-0].regs.flags & R_CTL_REG) {
  1528.                 w0 |= 0x04C0A0 | yypvt[-2].regs.r6 << 8 | yypvt[-0].regs.ctl_reg;
  1529.             } else if(yypvt[-2].regs.flags & yypvt[-0].regs.flags & R_CTL_REG) {
  1530.                 /* bogus? $$$ */
  1531.                        w0 |= 0x04C0A0 | (yypvt[-2].regs.ctl_reg | 0x20) << 8 | 
  1532.                 yypvt[-0].regs.ctl_reg;
  1533.             } else {
  1534.                 yyerror("MOVEC must reference a control reg");
  1535.             }} break;
  1536. case 169:
  1537. # line 899 "a56.y"
  1538. {w0 |= 0x084080;
  1539.             switch(yypvt[-3].ea.pp << 1 | yypvt[-0].ea.pp) {
  1540.                 case 0:    case 3:
  1541.                     yyerror("illegal MOVEP; can't move EA to EA or IO to IO");
  1542.                     break;
  1543.                 case 1:    /* ea, pp */
  1544.                     w0 |= yypvt[-1].ival << 16 | 1 << 15 | yypvt[-4].ival << 6 |
  1545.                         (yypvt[-0].ea.ext & 0x3F);
  1546.                     if(yypvt[-3].ea.mode == 0x003000) {
  1547.                         w0 |= 0x003000;
  1548.                         uses_w1++;
  1549.                         w1 = yypvt[-3].ea.ext;
  1550.                     } else {
  1551.                         w0 |= yypvt[-3].ea.mode;
  1552.                     }
  1553.                     break;
  1554.                 case 2:    /* pp, ea */
  1555.                     w0 |= yypvt[-4].ival << 16 | 0 << 15 | yypvt[-1].ival << 6 |
  1556.                         (yypvt[-3].ea.ext & 0x3F);
  1557.                     if(yypvt[-0].ea.mode == 0x003000) {
  1558.                         w0 |= 0x003000;
  1559.                         uses_w1++;
  1560.                         w1 = yypvt[-0].ea.ext;
  1561.                     } else {
  1562.                         w0 |= yypvt[-0].ea.mode;
  1563.                     }
  1564.                     break;
  1565.             }} break;
  1566. case 170:
  1567. # line 928 "a56.y"
  1568. {w0 |= 0x084080;
  1569.             w0 |= yypvt[-1].ival << 16 | 1 << 15 | 0x34 << 8 | (yypvt[-0].ival & 0x3F);
  1570.             uses_w1++;
  1571.             w1 = yypvt[-3].ival;} break;
  1572. case 171:
  1573. # line 933 "a56.y"
  1574. {w0 |= 0x084040;
  1575.             w0 |= yypvt[-1].ival << 16 | 1 << 15 | (yypvt[-0].ival & 0x3F);} break;
  1576. case 172:
  1577. # line 936 "a56.y"
  1578. {w0 |= 0x084040;
  1579.             if(yypvt[-3].ea.mode != 0x003000 && yypvt[-3].ea.mode != 0)
  1580.                 yyerror("illegal MOVEP");
  1581.             w0 |= yypvt[-4].ival << 16 | 0 << 15 | (yypvt[-3].ea.ext & 0x3F);} break;
  1582. case 173:
  1583. # line 941 "a56.y"
  1584. {w0 |= 0x084000;
  1585.             w0 |= yypvt[-1].ival << 16 | 1 << 15 | yypvt[-3].regs.r6 << 8 | (yypvt[-0].ival & 0x3F);} break;
  1586. case 174:
  1587. # line 944 "a56.y"
  1588. {w0 |= 0x084000;
  1589.             if(!yypvt[-2].ea.pp)
  1590.                 yyerror("illegal MOVEP");
  1591.             w0 |= yypvt[-3].ival << 16 | 0 << 15 | yypvt[-0].regs.r6 << 8 | (yypvt[-2].ea.ext & 0x3F);} break;
  1592. case 175:
  1593. # line 952 "a56.y"
  1594. {if(yypvt[-0].ival != -1 && yypvt[-0].ival >= 0xFFC0) {
  1595.                 /* defined symbol or constant, in i/o range */
  1596.                 yyval.ea.pp = 1;
  1597.                 yyval.ea.mode = 0;
  1598.             } else {
  1599.                 /* either out of i/o range or symbol not */
  1600.                 /* yet defined:  assume ea extension */
  1601.                 yyval.ea.pp = 0;
  1602.                 yyval.ea.mode = 0x003000;
  1603.             }
  1604.             yyval.ea.ext = yypvt[-0].ival;} break;
  1605. case 176:
  1606. # line 964 "a56.y"
  1607. {yyval.ea.pp = 1;
  1608.             yyval.ea.mode = 0;
  1609.             if(yypvt[-0].ival < 0xFFC0 && pass == 2)
  1610.                 yyerror("warning: address operand truncated");
  1611.             yyval.ea.ext = yypvt[-0].ival;} break;
  1612. case 177:
  1613. # line 970 "a56.y"
  1614. {yyval.ea.mode = yypvt[-0].ival << 8;
  1615.             yyval.ea.ext = yypvt[-0].ival;} break;
  1616. case 178:
  1617. # line 976 "a56.y"
  1618. {w0 |= 0x070000 | 0 << 15 | yypvt[-3].regs.r6;} break;
  1619. case 179:
  1620. # line 978 "a56.y"
  1621. {w0 |= 0x070000 | 1 << 15 | yypvt[-0].regs.r6;} break;
  1622. case 180:
  1623. # line 985 "a56.y"
  1624. {yyval.ival = yypvt[-0].ival; if(yypvt[-0].ival > 0x17) yyerror("illegal bit number");} break;
  1625. case 181:
  1626. # line 989 "a56.y"
  1627. {yyval.ival = 0;} break;
  1628. case 182:
  1629. # line 991 "a56.y"
  1630. {yyval.ival = 1;} break;
  1631. case 183:
  1632. # line 997 "a56.y"
  1633. {w0 |= 0x004080;} break;
  1634. case 184:
  1635. # line 999 "a56.y"
  1636. {w0 |= (yypvt[-0].ival & 0x3F) << 8;
  1637.             if(yypvt[-0].ival > 0x003F && pass == 2)
  1638.                 yyerror("warning: address operand truncated");
  1639.             } break;
  1640. case 185:
  1641. # line 1006 "a56.y"
  1642. {yyval.ival = 1;} break;
  1643. case 186:
  1644. # line 1008 "a56.y"
  1645. {w0 |= yypvt[-0].ival & 0xFFF; yyval.ival = 0;
  1646.             if(yypvt[-0].ival > 0x0FFF && pass == 2)
  1647.                 yyerror("warning: address operand truncated");
  1648.             } break;
  1649. case 187:
  1650. # line 1015 "a56.y"
  1651. {w0 |= 0x003000;
  1652.             uses_w1++;
  1653.             w1 |= yypvt[-0].ival;
  1654.             yyval.ival = 0x003000;} break;
  1655. case 188:
  1656. # line 1020 "a56.y"
  1657. {w0 |= yypvt[-0].ival << 8;
  1658.             yyval.ival = yypvt[-0].ival << 8;} break;
  1659. case 189:
  1660. # line 1026 "a56.y"
  1661. {yyval.ival = yypvt[-0].ival;} break;
  1662. case 190:
  1663. # line 1028 "a56.y"
  1664. {yyval.ival = 4 << 3 | yypvt[-1].ival;} break;
  1665. case 191:
  1666. # line 1030 "a56.y"
  1667. {yyval.ival = 5 << 3 | yypvt[-3].ival;
  1668.             if(yypvt[-3].ival != yypvt[-1].ival) yyerror("Rn and Nn must be same number");} break;
  1669. case 192:
  1670. # line 1033 "a56.y"
  1671. {yyval.ival = 7 << 3 | yypvt[-1].ival;} break;
  1672. case 193:
  1673. # line 1038 "a56.y"
  1674. {yyval.ival = 0 << 3 | yypvt[-3].ival;
  1675.             if(yypvt[-3].ival != yypvt[-0].ival) yyerror("Rn and Nn must be same number");} break;
  1676. case 194:
  1677. # line 1041 "a56.y"
  1678. {yyval.ival = 1 << 3 | yypvt[-3].ival;
  1679.             if(yypvt[-3].ival != yypvt[-0].ival) yyerror("Rn and Nn must be same number");} break;
  1680. case 195:
  1681. # line 1044 "a56.y"
  1682. {yyval.ival = 2 << 3 | yypvt[-2].ival;} break;
  1683. case 196:
  1684. # line 1046 "a56.y"
  1685. {yyval.ival = 3 << 3 | yypvt[-2].ival;} break;
  1686. case 197:
  1687. # line 1052 "a56.y"
  1688. {yyval.regs.r6 = yyval.regs.r5 = 0x04 | yypvt[-0].ival;
  1689.             yyval.regs.sdx = yypvt[-0].ival;
  1690.             yyval.regs.xreg = yypvt[-0].ival;
  1691.             yyval.regs.flags = R_R6|R_R5|R_XREG|R_SDX;} break;
  1692. case 198:
  1693. # line 1057 "a56.y"
  1694. {yyval.regs.r6 = yyval.regs.r5 = 0x06 | yypvt[-0].ival;
  1695.             yyval.regs.sdy = yypvt[-0].ival;
  1696.             yyval.regs.yreg = yypvt[-0].ival;
  1697.             yyval.regs.flags = R_R6|R_R5|R_SDY|R_YREG;} break;
  1698. case 199:
  1699. # line 1062 "a56.y"
  1700. {switch(yypvt[-0].ival) {
  1701.                 case 0: 
  1702.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 0; 
  1703.                     break;
  1704.                 case 1: 
  1705.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 4; 
  1706.                     break;
  1707.                 case 2: 
  1708.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 2; 
  1709.                     break;
  1710.             }
  1711.             yyval.regs.flags = R_R6|R_R5;} break;
  1712. case 200:
  1713. # line 1075 "a56.y"
  1714. {switch(yypvt[-0].ival) {
  1715.                 case 0: 
  1716.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 1; break;
  1717.                 case 1: 
  1718.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 5; break;
  1719.                 case 2: 
  1720.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 3; break;
  1721.             }
  1722.             yyval.regs.flags = R_R6|R_R5;} break;
  1723. case 201:
  1724. # line 1085 "a56.y"
  1725. {yyval.regs.r6 = yyval.regs.r5 = 0x0E;
  1726.             yyval.regs.sdx = yyval.regs.sdy = 0x2;
  1727.             yyval.regs.ab = 0;
  1728.             yyval.regs.lsd = 4;
  1729.             yyval.regs.flags = R_R6|R_R5|R_SDX|R_SDY|R_AB|R_LSD;} break;
  1730. case 202:
  1731. # line 1091 "a56.y"
  1732. {yyval.regs.r6 = yyval.regs.r5 = 0x0F;
  1733.             yyval.regs.sdx = yyval.regs.sdy = 0x3;
  1734.             yyval.regs.ab = 1;
  1735.             yyval.regs.lsd = 5;
  1736.             yyval.regs.flags = R_R6|R_R5|R_SDX|R_SDY|R_AB|R_LSD;} break;
  1737. case 203:
  1738. # line 1097 "a56.y"
  1739. {yyval.regs.r6 = yyval.regs.r5 = 0x10 | yypvt[-0].ival;
  1740.             yyval.regs.r4 = 0x00 | yypvt[-0].ival;
  1741.             yyval.regs.flags = R_R6|R_R5|R_R4;} break;
  1742. case 204:
  1743. # line 1101 "a56.y"
  1744. {yyval.regs.r6 = yyval.regs.r5 = 0x18 | yypvt[-0].ival;
  1745.             yyval.regs.r4 = 0x08 | yypvt[-0].ival;
  1746.             yyval.regs.flags = R_R6|R_R5|R_R4;} break;
  1747. case 205:
  1748. # line 1105 "a56.y"
  1749. {yyval.regs.r6 = 0x20 | yypvt[-0].ival;
  1750.             yyval.regs.r5 = -1;
  1751.             yyval.regs.ctl_reg = yypvt[-0].ival;
  1752.             yyval.regs.flags = R_R6|R_R5|R_CTL_REG;} break;
  1753. case 206:
  1754. # line 1110 "a56.y"
  1755. {yyval.regs.r6 = 0x38 | yypvt[-0].ival;
  1756.             yyval.regs.r5 = -1;
  1757.             yyval.regs.ctl_reg = 0x18 | yypvt[-0].ival;
  1758.             yyval.regs.flags = R_R6|R_R5|R_CTL_REG;} break;
  1759. case 207:
  1760. # line 1115 "a56.y"
  1761. {yyval.regs.lsd  = 0;
  1762.             yyval.regs.flags = R_LSD;} break;
  1763. case 208:
  1764. # line 1118 "a56.y"
  1765. {yyval.regs.lsd = 1;
  1766.             yyval.regs.flags = R_LSD;} break;
  1767. case 209:
  1768. # line 1121 "a56.y"
  1769. {yyval.regs.lsd = 2;
  1770.             yyval.regs.flags = R_LSD;} break;
  1771. case 210:
  1772. # line 1124 "a56.y"
  1773. {yyval.regs.lsd = 3;
  1774.             yyval.regs.flags = R_LSD;} break;
  1775. case 211:
  1776. # line 1127 "a56.y"
  1777. {yyval.regs.lsd = 6;
  1778.             yyval.regs.flags = R_LSD;} break;
  1779. case 212:
  1780. # line 1130 "a56.y"
  1781. {yyval.regs.lsd = 7;
  1782.             yyval.regs.flags = R_LSD;} break;
  1783. case 213:
  1784. # line 1136 "a56.y"
  1785. {yyval.ival = 1;} break;
  1786. case 214:
  1787. # line 1138 "a56.y"
  1788. {yyval.ival = 2;} break;
  1789. case 215:
  1790. # line 1140 "a56.y"
  1791. {yyval.ival = 3;} break;
  1792. case 216:
  1793. # line 1142 "a56.y"
  1794. {yyval.ival = 4;} break;
  1795. case 217:
  1796. # line 1144 "a56.y"
  1797. {yyval.ival = 5;} break;
  1798. case 218:
  1799. # line 1146 "a56.y"
  1800. {yyval.ival = 6;} break;
  1801. case 219:
  1802. # line 1148 "a56.y"
  1803. {yyval.ival = 7;} break;
  1804. case 220:
  1805. # line 1153 "a56.y"
  1806. {yyval.ival = 0;} break;
  1807. case 221:
  1808. # line 1155 "a56.y"
  1809. {yyval.ival = 1;} break;
  1810. case 222:
  1811. # line 1157 "a56.y"
  1812. {yyval.ival = 2;} break;
  1813. case 231:
  1814. # line 1174 "a56.y"
  1815. {if(yypvt[-2].ival <= 0xFF) {
  1816.                 w0 |= 0x200000 | (yypvt[-2].ival & 0xFF) << 8 | 
  1817.                     yypvt[-0].regs.r5 << 16;
  1818.             } else { /* go long, use X: format */
  1819.                 w0 |= 0x400000 | 0x00F400 | 
  1820.                     (yypvt[-0].regs.r5 >> 3 & 3) << 20 | 
  1821.                     (yypvt[-0].regs.r5 & 7) << 16;
  1822.                 uses_w1++; w1 = yypvt[-2].ival;
  1823.             }} break;
  1824. case 232:
  1825. # line 1186 "a56.y"
  1826. {
  1827.                 if(yypvt[-2].regs.flags & R_R5 & yypvt[-0].regs.flags) 
  1828.                     w0 |= 0x200000 | yypvt[-0].regs.r5 << 8 | yypvt[-2].regs.r5 << 13;
  1829.                 else
  1830.                     yyerror("illegal R move");
  1831.             } break;
  1832. case 233:
  1833. # line 1195 "a56.y"
  1834. {w0 |= 0x204000 | yypvt[-0].ival << 8;} break;
  1835. case 234:
  1836. # line 1200 "a56.y"
  1837. {w0 |= 0x40C000 | yypvt[-3].ival << 19;
  1838.             w0 |= (yypvt[-0].regs.r5 >> 3 & 3) << 20 | (yypvt[-0].regs.r5 & 7) << 16;} break;
  1839. case 235:
  1840. # line 1203 "a56.y"
  1841. {w0 |= 0x408000 | yypvt[-3].ival << 19 | (yypvt[-2].ival & 0x3F) << 8;
  1842.             if(yypvt[-2].ival > 0x003F && pass == 2)
  1843.                 yyerror("warning: address operand truncated");
  1844.             w0 |= (yypvt[-0].regs.r5>> 3 & 3) << 20 | (yypvt[-0].regs.r5 & 7) << 16;} break;
  1845. case 236:
  1846. # line 1208 "a56.y"
  1847. {w0 |= 0x404000 | yypvt[-1].ival << 19;
  1848.             w0 |= (yypvt[-3].regs.r5 >> 3 & 3) << 20 | (yypvt[-3].regs.r5 & 7) << 16;} break;
  1849. case 237:
  1850. # line 1211 "a56.y"
  1851. {w0 |= 0x400000 | yypvt[-1].ival << 19 | (yypvt[-0].ival & 0x3F) << 8;
  1852.             if(yypvt[-0].ival > 0x003F && pass == 2)
  1853.                 yyerror("warning: address operand truncated");
  1854.             w0 |= (yypvt[-3].regs.r5 >> 3 & 3) << 20 | (yypvt[-3].regs.r5 & 7) << 16;} break;
  1855. case 238:
  1856. # line 1216 "a56.y"
  1857. {w0 |= 0x400000 | 0x00F400 | (yypvt[-0].regs.r5 >> 3 & 3) << 20 |
  1858.                 (yypvt[-0].regs.r5 & 7) << 16;
  1859.             uses_w1++; w1 = yypvt[-2].ival;
  1860.             } break;
  1861. case 239:
  1862. # line 1223 "a56.y"
  1863. {if(yypvt[-6].ival == 0 && yypvt[-2].regs.flags & R_AB) {
  1864.                 w0 |= 0x108000 | yypvt[-3].regs.sdx << 18 | yypvt[-2].regs.ab << 17 |
  1865.                     yypvt[-0].ival << 16;
  1866.             } else {
  1867.                 yyerror("illegal X:R move");
  1868.             }} break;
  1869. case 240:
  1870. # line 1230 "a56.y"
  1871. {if(yypvt[-2].regs.flags & R_AB) {
  1872.                 w0 |= 0x10B400 | yypvt[-3].regs.sdx << 18 | yypvt[-2].regs.ab << 17 |
  1873.                     yypvt[-0].ival << 16;
  1874.                 uses_w1++;
  1875.                 w1 |= yypvt[-5].ival & 0xFFFFFF;
  1876.             } else {
  1877.                 yyerror("illegal X:R move");
  1878.             }} break;
  1879. case 241:
  1880. # line 1239 "a56.y"
  1881. {if(yypvt[-6].regs.flags & R_SDX && yypvt[-4].ival == 0 && yypvt[-2].regs.flags & R_AB &&
  1882.                 yypvt[-0].regs.flags & R_YREG) {
  1883.                 w0 |= 0x100000 | yypvt[-6].regs.sdx << 18 | yypvt[-2].regs.ab << 17 |
  1884.                     yypvt[-0].regs.yreg << 16;
  1885.             } else if(yypvt[-6].regs.flags & R_AB && yypvt[-4].ival == 0 && 
  1886.                 yypvt[-2].regs.flags & R_XREG && yypvt[-0].regs.flags & R_AB) {
  1887.                 if(yypvt[-2].regs.xreg != 0) yyerror("must use X0");
  1888.                 if(yypvt[-6].regs.ab == 0 && yypvt[-0].regs.ab == 0)
  1889.                     w0 |= 0x080000;
  1890.                 else if(yypvt[-6].regs.ab == 1 && yypvt[-0].regs.ab == 1)
  1891.                     w0 |= 0x090000;
  1892.                 else
  1893.                     yyerror("illegal X:R move");
  1894.             } else {
  1895.                 yyerror("illegal X:R move");
  1896.             }} break;
  1897. case 242:
  1898. # line 1258 "a56.y"
  1899. {if(yypvt[-4].regs.flags & R_XREG && yypvt[-0].regs.flags & (R_YREG|R_AB)) {
  1900.                 w0 |= 0x10C000 | yypvt[-6].regs.ab << 19 | yypvt[-4].regs.yreg << 18 |
  1901.                     yypvt[-0].regs.sdy << 16;
  1902.             } else {
  1903.                 yyerror("illegal R:Y move");
  1904.             }} break;
  1905. case 243:
  1906. # line 1265 "a56.y"
  1907. {if(yypvt[-3].regs.flags & R_XREG && yypvt[-0].regs.flags & (R_YREG|R_AB)) {
  1908.                 w0 |= 0x10F400 | yypvt[-5].regs.ab << 19 | yypvt[-3].regs.xreg << 18 |
  1909.                     yypvt[-0].regs.sdy << 16;
  1910.                 uses_w1++;
  1911.                 w1 |= yypvt[-2].ival & 0xFFFFFF;
  1912.             } else {
  1913.                 yyerror("illegal R:Y move");
  1914.             }} break;
  1915. case 244:
  1916. # line 1274 "a56.y"
  1917. {if(yypvt[-6].regs.flags & R_AB && yypvt[-4].regs.flags & R_XREG) {
  1918.                 w0 |= 0x104000 | yypvt[-6].regs.ab << 19 | yypvt[-4].regs.xreg << 18 |
  1919.                 yypvt[-3].regs.sdy << 16;
  1920.             } else if (yypvt[-6].regs.flags & R_YREG && yypvt[-4].regs.flags & R_AB &&
  1921.                 yypvt[-3].regs.flags & R_AB) {
  1922.                 if(yypvt[-6].regs.yreg != 0) yyerror("must use Y0");
  1923.                 if(yypvt[-4].regs.ab == 0 && yypvt[-3].regs.ab == 0)
  1924.                     w0 |= 0x088000;
  1925.                 else if(yypvt[-4].regs.ab == 1 && yypvt[-3].regs.ab == 1)
  1926.                     w0 |= 0x098000;
  1927.                 else
  1928.                     yyerror("illegal R:Y move");
  1929.             } else {
  1930.                 yyerror("illegal R:Y move");
  1931.             }} break;
  1932. case 245:
  1933. # line 1292 "a56.y"
  1934. {w0 |= 0x40C000 | (yypvt[-0].regs.lsd & 3) << 16 | (yypvt[-0].regs.lsd >> 2) << 19;} break;
  1935. case 246:
  1936. # line 1294 "a56.y"
  1937. {w0 |= 0x404000 | (yypvt[-3].regs.lsd & 3) << 16 | (yypvt[-3].regs.lsd >> 2) << 19;} break;
  1938. case 247:
  1939. # line 1296 "a56.y"
  1940. {w0 |= 0x408000 | (yypvt[-0].regs.lsd & 3) << 16 | (yypvt[-0].regs.lsd >> 2) << 19;
  1941.             if(yypvt[-2].ival > 0x003F && pass == 2)
  1942.                 yyerror("warning: address operand truncated");
  1943.             w0 |= (yypvt[-2].ival & 0x3F) << 8;} break;
  1944. case 248:
  1945. # line 1301 "a56.y"
  1946. {w0 |= 0x400000 | (yypvt[-3].regs.lsd & 3) << 16 | (yypvt[-3].regs.lsd >> 2) << 19;
  1947.             if(yypvt[-0].ival > 0x003F && pass == 2)
  1948.                 yyerror("warning: address operand truncated");
  1949.             w0 |= (yypvt[-0].ival & 0x3F) << 8;} break;
  1950. case 249:
  1951. # line 1309 "a56.y"
  1952. {int eax = yypvt[-6].ival, eay = yypvt[-2].ival;
  1953.             w0 = 0xC08000;    /* both write */
  1954.                   if(eax & 0x4 == eay & 0x4)
  1955.                 yyerror("registers must be in opposite halves");
  1956.             w0 |= eax << 8 | (eay & 3) << 13 | (eay >> 3) << 18;} break;
  1957. case 250:
  1958. # line 1315 "a56.y"
  1959. {int eax = yypvt[-6].ival, eay = yypvt[-0].ival;
  1960.             w0 = 0x808000;    /* X:write, Y:read */
  1961.                   if(eax & 0x4 == eay & 0x4)
  1962.                 yyerror("registers must be in opposite halves");
  1963.             w0 |= eax << 8 | (eay & 3) << 13 | (eay >> 3) << 18;} break;
  1964. case 251:
  1965. # line 1321 "a56.y"
  1966. {int eax = yypvt[-4].ival, eay = yypvt[-2].ival;
  1967.                   w0 = 0xC00000;    /* X:read, Y:write */
  1968.             if(eax & 0x4 == eay & 0x4)
  1969.                 yyerror("registers must be in opposite halves");
  1970.             w0 |= eax << 8 | (eay & 3) << 13 | (eay >> 3) << 18;} break;
  1971. case 252:
  1972. # line 1327 "a56.y"
  1973. {int eax = yypvt[-4].ival, eay = yypvt[-0].ival;
  1974.                   w0 = 0x800000;    /* both read */
  1975.             if(eax & 0x4 == eay & 0x4)
  1976.                 yyerror("registers must be in opposite halves");
  1977.             w0 |= eax << 8 | (eay & 3) << 13 | (eay >> 3) << 18;} break;
  1978. case 253:
  1979. # line 1337 "a56.y"
  1980. {yyval.ival = yypvt[-0].ival;} break;
  1981. case 254:
  1982. # line 1339 "a56.y"
  1983. {yyval.ival = yypvt[-0].ival;} break;
  1984. case 255:
  1985. # line 1341 "a56.y"
  1986. {yyval.ival = yypvt[-0].ival;} break;
  1987. case 256:
  1988. # line 1345 "a56.y"
  1989. {yyval.ival = yypvt[-0].ival;} break;
  1990. case 257:
  1991. # line 1347 "a56.y"
  1992. {yyval.ival = yypvt[-0].ival & 0xFF;} break;
  1993. case 258:
  1994. # line 1351 "a56.y"
  1995. {yyval.ival = yypvt[-0].ival;} break;
  1996. case 259:
  1997. # line 1356 "a56.y"
  1998. {yyval.ival = yypvt[-0].ival;} break;
  1999. case 260:
  2000. # line 1358 "a56.y"
  2001. {yyval.ival = pc;} break;
  2002. case 261:
  2003. # line 1363 "a56.y"
  2004. {yyval.ival = yypvt[-0].ival;} break;
  2005. case 262:
  2006. # line 1365 "a56.y"
  2007. {yyval.ival = pc;} break;
  2008. case 263:
  2009. # line 1370 "a56.y"
  2010. {yyval.ival = yypvt[-0].ival;} break;
  2011. case 264:
  2012. # line 1375 "a56.y"
  2013. {yyval.ival = yypvt[-0].ival & 0xFFFFFF;} break;
  2014. case 265:
  2015. # line 1377 "a56.y"
  2016. {yyval.ival = sym_ref(yypvt[-0].sval); free(yypvt[-0].sval);} break;
  2017. case 266:
  2018. # line 1382 "a56.y"
  2019. {yyval.ival = yypvt[-0].ival;} break;
  2020. case 267:
  2021. # line 1384 "a56.y"
  2022. {yyval.ival = sym_ref(yypvt[-0].sval); free(yypvt[-0].sval);} break;
  2023. case 268:
  2024. # line 1386 "a56.y"
  2025. {yyval.ival = yypvt[-0].cval;} break;
  2026. case 269:
  2027. # line 1390 "a56.y"
  2028. {yyval.ival = yypvt[-2].ival | yypvt[-0].ival;} break;
  2029. case 270:
  2030. # line 1392 "a56.y"
  2031. {yyval.ival = yypvt[-2].ival ^ yypvt[-0].ival;} break;
  2032. case 271:
  2033. # line 1394 "a56.y"
  2034. {yyval.ival = yypvt[-2].ival & yypvt[-0].ival;} break;
  2035. case 272:
  2036. # line 1396 "a56.y"
  2037. {yyval.ival = yypvt[-2].ival >> yypvt[-0].ival;} break;
  2038. case 273:
  2039. # line 1398 "a56.y"
  2040. {yyval.ival = yypvt[-2].ival << yypvt[-0].ival;} break;
  2041. case 274:
  2042. # line 1400 "a56.y"
  2043. {yyval.ival = yypvt[-2].ival - yypvt[-0].ival;} break;
  2044. case 275:
  2045. # line 1402 "a56.y"
  2046. {yyval.ival = yypvt[-2].ival + yypvt[-0].ival;} break;
  2047. case 276:
  2048. # line 1404 "a56.y"
  2049. {yyval.ival = yypvt[-2].ival % yypvt[-0].ival;} break;
  2050. case 277:
  2051. # line 1406 "a56.y"
  2052. {yyval.ival = yypvt[-2].ival / yypvt[-0].ival;} break;
  2053. case 278:
  2054. # line 1408 "a56.y"
  2055. {yyval.ival = yypvt[-2].ival * yypvt[-0].ival;} break;
  2056. case 279:
  2057. # line 1410 "a56.y"
  2058. {yyval.ival = - yypvt[-0].ival;} break;
  2059. case 280:
  2060. # line 1412 "a56.y"
  2061. {yyval.ival = ~ yypvt[-0].ival;} break;
  2062. case 281:
  2063. # line 1414 "a56.y"
  2064. {yyval.ival = yypvt[-1].ival;} break;
  2065. case 282:
  2066. # line 1416 "a56.y"
  2067. {yyval.ival = yypvt[-0].ival;} break;
  2068.         }
  2069.         goto yystack;  /* stack new state and value */
  2070.  
  2071.     }
  2072.